總之,我想最右邊的最長項適合該模式的匹配字符串:問題與正則表達式匹配重疊
[0-9][0-9\s]*(\.|,)\s*[0-9]\s*[0-9]
考慮,例如,字符串「abc 1.5 28.00」 。我想匹配「5 28.00」。
使用模式 「原樣」,像這樣
preg_match_all('/[0-9][0-9\s]*(\.|,)\s*[0-9]\s*[0-9]/', 'abc 1.5 28.00', $result);
我們不是得到下面的比賽:
[0] => 1.5 2
[1] => 8.00
否 「5 28.00」 或 「28.00」 對於這個問題,對於明顯的原因。
我做了一些研究,人們建議使用積極的向前看這樣的問題。所以,我想下面的
preg_match_all('/(?=([0-9][0-9\s]*(\.|,)\s*[0-9]\s*[0-9]))/', 'abc 1.5 28.00', $result);
給我們這些比賽:
[0] => 1.5 2
[1] => 5 28.00
[2] => 28.00
[3] => 8.00
現在,「5 28.00」就在那裏,這是很好的,但它不能可靠確定爲正確的匹配(例如,你不能只從最後一遍遍尋找最長的匹配,因爲可能會有更長的匹配出現在字符串中)。理想情況下,我希望最後的那些子比賽(索引2和3)不在那裏,因此我們可以抓住最後一個索引。
有沒有人有如何以最簡單/最好的方式完成我所需要的想法?讓我知道是否需要澄清任何事情,因爲我知道這些東西可能會讓人困惑,並且很多事先要感謝。
**編輯:一些附加的輸入/匹配實例
「ABC 1.5 28.00999」=> 「5 28.00」(即無法匹配字符串的結尾,$)
「ABC 500000.05.00 「=>‘5.00’
提供更多的例子輸入字符串和你想要捕獲的內容。 – anubhava
你可以用'[。,]'替換'(\。|,)'' –
謝謝,那很愚蠢。我想我仍然需要逃避。雖然? –