2013-09-21 50 views
0

我有這兩種形式中的一種幾千串:如何將這兩個正則表達式合併爲一個?

SomeT1tle-ThatL00ks L1k3.this - $3.57 KnownWord

SomeT1tle-ThatL00ks L1k3.that - 4.5% KnownWord

SomeT1tle-ThatL00ks L1ke.this部分可以包含大寫和小寫字符,數字,句號,連字符和空格。它總是跟着一個太空破折號空間模式。

我想拉出標題(空格 - 破折號空格分隔符前的部分)和金額,這正好在KnownWord之前。

所以對於這兩個字符串我想:

SomeT1tle-ThatL00ks L1k3.this, $3.57

SomeT1tle-ThatL00ks L1k3.that, 4.5%

此代碼的工作(使用Perl相當於正則表達式)

$my_string = "SomeT1tle-ThatL00ks L1k3.this - $3.57 KnownWord"; 

$pattern_title = "/^(.*?)\x20\x2d\x20/"; 
$pattern_amount = "/([0-9.$%]+) KnownWord$/"; 

preg_match_all($pattern_title, $my_string, $matches_title); 
preg_match_all($pattern_amount, $my_string, $matches_amount); 

echo $matches_title[1][0] . " " . $matches_amount[1][0] . "<br>"; 

我試圖把兩種模式一起:

$pattern_together_doesnt_work = "/^(.*?)\x20\x2d\x20([0-9.$%]+) KnownWord$/"; 

但圖案的第一部分總是匹配整個事情,即使有「懶惰」部分(.*?而不是.*)。我不能否定空格和破折號,因爲標題本身可以包含任何一個。

任何提示?

回答

1

使用此模式

/^(.*?)\x20\x2d\x20([0-9.$%]+) KnownWord$/ 
+0

OK,那工作。 (不知道爲什麼它之前沒有。)我在編輯的表達式中有一個額外的斜槓。我還用'$ matches [1] [0]'和'$ matches [2] [0]'來獲得正確的字段。感謝您通過它說話我! – John

相關問題