2011-11-25 81 views
2

我的preg_match有什麼問題?preg_match不捕獲內容

preg_match('numVar("XYZ-(.*)");',$var,$results); 

我想從這裏得到內容的所有

numVar( 「XYZ-內容」);

謝謝你的幫助!

回答

2

我想這是PHP?如果是的話,你的代碼有三個問題。

  1. PHP的PCRE函數要求使用分隔符格式化正則表達式。通常的分隔符是/,但您可以使用任何您想要的匹配對。
  2. 您沒有在正則表達式中隱藏括號,因此您不匹配(字符,而是創建一個RE組。
  3. 您應該在RE中使用非貪婪匹配。否則,像numVar("XYZ-CONTENT1");numVar("XYZ-CONTENT2");這樣的字符串將匹配兩個,您的「內容」組將爲CONTENT1");numVar("XYZ-CONTENT2

試試這個:

$var = 'numVar("XYZ-CONTENT");'; 
preg_match('/numVar\("XYZ-(.*?)"\);/',$var,$results); 

var_dump($results); 
+0

謝謝! – Jakub

1

將您的示例字符串粘貼到http://txt2re.com並查看PHP結果。

這將顯示您需要轉義對正則表達式引擎具有特殊含義的字符(例如括號)。

+0

酷網站 - 必須記住那一個。 –

0

你應該逃避一些字符:

preg_match('numVar\("XYZ-(.*)"\);',$var,$results); 
+0

對不起,它不工作,我得到:分隔符不能是字母數字或反斜槓 – Jakub

+0

其實你必須逃避更多的字符,即反斜槓本身。此外,該模式本身缺少開始/結束分隔符,例如, '/' –

+0

好的,但是當我在開始和結尾添加'/'時,它不會返回任何結果 – Jakub

0
preg_match("/XYZ\-(.+)\b/", $string, $result); 
print_r($result[0]); // full matches ie XYZ-CONTENT 
print_r($result[1]); // matches in the first paren set (.*) 
+0

整個結構很重要 - numVar(「XYZ- – Jakub