0

我对整个正则表达式很陌生,并尝试preg_match_all在 PHP 中做一个,这是我想要的结果,但问题是它匹配我真正想要的所有内容......就像这样:

字符串:来自正则表达式的匹配:This is something <code>Some code here</code> and more 来自正则表达式的<code>Some code here</code> and more 想要匹配:<code>Some code here</code>

这是我正在使用的正则表达式: /<code>(.*)<\/code>/

我认为它与开始和结束/分隔符有关,但我不完全确定。

任何帮助将不胜感激,谢谢!

4

4 回答 4

8

这颗星是贪婪的,这意味着它会尽可能多地匹配。采用

(.*?)

相反,让它变得懒惰。您还可以使用否定字符类:

!<code>([^<]*)</code>!

编辑/:由于 mvds 删除了他/她的答案,这里有一个提示:如果你不将斜杠 ( ) 用作分隔符,就可以避免转义,就像我在上面所做的那样 ^ (used !)

这是关于正则表达式的一个很好的资源:
http ://www.regular-expressions.info/repeat.html

于 2010-08-08T21:45:03.843 回答
2

你想让它.*变得不贪婪。如果您?在模式的该部分之后放置一个,它将匹配所有匹配的正则表达式的下一部分。所以制作正则表达式/<code>(.*?)<\/code>/

于 2010-08-08T21:46:23.783 回答
1

你需要禁用贪婪。改用.*?,我相信。

于 2010-08-08T21:44:42.657 回答
0

我不是 100% 确定这是如何编译的——你需要/像这样逃避第二个:

/<code>(.*)<\/code>/

这样PHP就将其识别为要匹配的字符而不是正则表达式的结尾(我认为它可能正在编译为替代正则表达式)。

于 2010-08-08T21:44:52.133 回答