2009-11-03 24 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