$str = "<p>(a)(3) asdf (10) asdf</p>";
尝试使用php preg_match_all
拉出第二组括号我正在解析非常大的文档,所以目前有这个:
preg_match_all("=(?:<p[^>]*>|<p[^>]*>Note|<i>|</i>)\((.*)\)=siU", $str, $matches);
拉这样的事情很好:
<p>(a)
<p>Note(a)
<i>(a)
</i>(a)
全部返回(a)
我也想在任何时候搜索:<p>(a)(3)
所以我需要第二个paren,它的值返回如(3)
我不想要任何其他paren +值,如(a)或(10)
答案 0 :(得分:0)
这样的事情怎么样?
preg_match_all("=(?:<p[^>]*>(:?Note)?|</?i>)\((.*)\)(?:\((.*)\))?=siU", $str, $matches);
答案 1 :(得分:0)
$string = "<p>(a)(3)
<p>Note(ddd)ssssss(a)(3)
<i>dkdkdjkdjkdjkjdkjdk(3)
<i>abc(a)(9)
</i>(a)(3)";
preg_match_all('%<.*?>([\w]+)?(\(.*?\))?(\(3\))%i', $string, $result, PREG_PATTERN_ORDER);
for ($i = 0; $i < count($result[0]); $i++) {
echo $result[3][$i]."<br>" ;
}
回声:
(3)
(3)
(3)
(3)
如果您需要匹配您可能使用的整行:
preg_match_all('/(<.*?>([\w]+)?(\(.*?\))?(\(3\)))/i', $string, $result, PREG_PATTERN_ORDER);
for ($i = 0; $i < count($result[1]); $i++) {
echo $result[1][$i]."<br>" ;
}
回声的:
<p>(a)(3)
<p>Note(ddd)ssssss(a)(3)
<i>dkdkdjkdjkdjkjdkjdk(3)
</i>(a)(3)