2009-11-03 52 views
0

我有兩個問題需要搭配:要麼正則表達式:OR(|)的子模式不工作

# ... ([0-9]+,[0-9]+) € ... # 

# ... (--) ... # 

現在,

# ... (?:(--)|([0-9]+,[0-9]+) €) ... # 

不工作它說

Unknown modifier '(' ... 

我在PHP 5.3上使用preg_match_all()

上面那些不是完整的表達式,只是摘錄!

+0

你可以發佈你如何」問題在PHP上下文中定義了你的模式? – 2009-11-03 17:01:38

+1

如果這些只是提取,請提供整個正則表達式作爲您發佈工作沒有錯誤... – Tomas 2009-11-03 17:06:02

+1

我相信在正則表達式中使用管道字符被稱爲「交替」而不是「或」。 – 2009-11-03 17:08:27

回答

0

你的正則表達式工作沒有錯誤:

$p = "/(?:(--)|([0-9]+,[0-9]+) €)/"; 
echo preg_match($p, "--")."\n";    // outputs 1 
echo preg_match($p, "nomatch")."\n";   // outputs 0 

請發表你的PHP代碼,所以我們可以identigy

+0

代碼有點太複雜,因爲它在循環等中構建了完整的表達式。 但我發現了錯誤,我正在使用|作爲分隔符,我完全模糊了。 – janoliver 2009-11-03 17:06:58

0

你已經把分隔符?

preg_match_all('#(?:(--)|([0-9]+,[0-9]+) €)#', ...) 

代替

preg_match_all('(?:(--)|([0-9]+,[0-9]+) €)', ...) 
+0

當然我使用分隔符...我只發佈了正則表達式的提取... – janoliver 2009-11-03 16:57:46