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$/";
但圖案的第一部分總是匹配整個事情,即使有「懶惰」部分(.*?
而不是.*
)。我不能否定空格和破折號,因爲標題本身可以包含任何一個。
任何提示?
OK,那工作。 (不知道爲什麼它之前沒有。)我在編輯的表達式中有一個額外的斜槓。我還用'$ matches [1] [0]'和'$ matches [2] [0]'來獲得正確的字段。感謝您通過它說話我! – John