簡體   English   中英

使用php和javascript匹配字符串中最后一個整數的正則表達式

[英]Regular expression to match the last integer in a string with php and javascript

我需要匹配字符串中的最后一個整數,並捕獲最后一個整數之前和之后的可能元素,假設字符串可以由單個整數或文本和/或整數的組合組成。 假設$ str可以是:

  • '123'->''-123-''
  • 'abc 123'->'abc'-123
  • 'abc 123 def'->'abc'-123-'def'
  • 'abc 123 def 456'->'abc 123 def'-456
  • 等等

我期望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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM