我知道这可能是一个愚蠢的问题,但我一直试图弄清楚如何让preg_match_all做我想做的事......
我想匹配看起来像< [someText]>的字符串 另外,我想以一种懒惰的方式做这件事,所以如果有一个像
这样的字符串$myString = '<[someText]> blah blah blah <[someOtherText]> lala [doNotMatchThis] ';
我想要2场比赛:'&lt; [someText]&gt;'和'&lt; [someOtherText]&gt;'而不是单个匹配'&lt; [someText]&gt; blah blah blah&lt; [someOtherText]&gt;'
我试图将此与以下模式相匹配
$pattern = '<\[.+?\]>';
但出于某种原因,我得到了3场比赛:[someText],[someOtherText]和[doNotMatchThis]
这使我相信由于某种原因,尖括号是干扰的,我觉得这很奇怪,因为它们不应该是元字符。
我做错了什么?
答案 0 :(得分:2)
您的模式需要分隔符(现在<
和>
被“视为”分隔符。
试试这个:
$pattern = '/<\[.+?\]>/';
以下内容:
$myString = '<[someText]> blah blah blah <[someOtherText]> lala [doNotMatchThis] ';
$pattern = '/<\[.+?\]>/';
preg_match_all($pattern, $myString, $matches);
print_r($matches);
将打印:
Array
(
[0] => Array
(
[0] => <[someText]>
[1] => <[someOtherText]>
)
)
答案 1 :(得分:2)
您错过了正确的分隔符(在这种情况下,您的< >
被视为分隔符)
$pattern = '~<\[.+?\]>~';