[英]Regular expression to match the last integer in a string with php and javascript
我需要匹配字符串中的最后一個整數,並捕獲最后一個整數之前和之后的可能元素,假設字符串可以由單個整數或文本和/或整數的組合組成。 假設$ str可以是:
我期望php中的以下代碼可以完成這項工作:
$str = 'abc 123 def 456 ghi';
preg_match('/(.*)(\d+)(\D*)$/', $str, $matches);
echo 'Matches = ' . implode(' : ', $matches);
但是(\\ d +)僅獲得一位數字:
Matches = abc 123 def 456 ghi : abc 123 def 45 : 6 : ghi
當我期待的時候:
Matches = abc 123 def 456 ghi : abc 123 def : 456 : ghi
我在Javascript中得到相同的行為。 (。*)是撞上(\\ d +)的貪婪嗎?
提前致謝!
為什么不/(\\d+)\\D*$/
? 這樣,唯一的捕獲組是整數。
順便說一句,當我使用正則表達式時,我通常使用http://gskinner.com/RegExr/
用Javascript:
$str = 'abc 123 def 456';
$matches = $str.match(/\d+/g);
$lastInt = $matches[$matches.length-1];
在PHP中
$str = 'abc 123 def 456';
preg_match_all('/(\d+)/', $str, $matches);
$lastInt = end($matches);
echo 'Last integer = ' . $lastInt;
您可以完全避免使用。*,因為模式結尾處的“ \\ D * $”可以確保它是最后一個數字。
還建議您不要添加不必要的括號,而只能得到您真正需要的內容。 也就是說,您可以執行以下操作以僅獲取最后一個數字:
preg_match('/(\d+)\D*$/', $str, $matches);
但是,如果確實需要在字符串的其他部分進行匹配,並且要查找的數字將是它自己的單詞,則可以在(\\ d +)之前在該regexp中添加\\ b參數,以使(。* )不會貪婪地消耗您的部分號碼。 即:
preg_match('/(.*)\b(\d+)(\D*)$/', $str, $matches);
這應該為您做...
(\d+)(?!.*\d)
如果要緩存最后一個整數,則應在正則表達式的末尾使用$。
嘗試使用/(\\d+)$/
兩種語言。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.