2012-07-19 79 views
1

我想构建一个preg_match_all,以便可以使用该数组,但问题是我无法优化我的正则表达式来工作。preg_match_all两个标记之间的正则表达式值

一个例子的输入将是:

#|First Name|# 
This text shouldn't be caught 
#|Second Value|# 

名字值和第二值都应该在数组中。

这是我已经试过:

preg_match_all('/\#\|(.*?)\|\#\]/',$html, $out); 

preg_match_all ("/^#\|*\|#*$/i", $html, $out); 
+0

它不? var_dump($ out)为第一个正则表达式显示了什么?如果你从第一个正则表达式中删除了'\]',那么怎么办? – Palladium 2012-07-19 21:23:45

回答

1

首先是正确的,它仅包含\]接近尾声这打破了你想要的。使用

/\#\|(.*?)\|\#/ 

确实给我正确的结果,在$out[1]匹配。不应该需要

preg_match_all('/#\|(.*?)\|#/', $html, $out); 

逃离#:

+0

哇多么愚蠢的错误:$感谢清理它。 – 2012-07-19 21:26:45

1

试试这个正则表达式:

/\#\|(.*?)\|\#/ 
0

尝试。要指定#之间没有#,你也可以使用

preg_match_all('/#\|([^#]*)\|#/', $html, $out); 
0

有几件事,你需要添加'。'在你的酒吧之间的字符。这个字符意味着匹配任何字符,没有它你说匹配零或更多'|'字符。您还需要为多行匹配添加m修饰符。

/^#\|.*\|#$/im 
+0

您忘记了捕捉表达式(。*)。此外,我的标志是多余的,因为在正则表达式中没有区分大小写的字符。 – LSerni 2012-07-19 21:28:38

相关问题