正则表达式多个括号

发布于 2024-10-14 14:10:15 字数 519 浏览 2 评论 0原文

$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)

我也想在任何时候看到这个:< code>

(a)(3)

所以我需要第二个括号及其返回的值,如 (3)

并且我不需要任何其他括号 + 值,如 (a) 或 (10)

$str = "<p>(a)(3) asdf (10) asdf</p>";

Trying to pull the second set of parentheses using php preg_match_all

Very big doc I'm parsing, so currently have this:

preg_match_all("=(?:<p[^>]*>|<p[^>]*>Note|<i>|</i>)\((.*)\)=siU", $str, $matches);

Pulling things like this fine:

<p>(a)
<p>Note(a)
<i>(a)
</i>(a)

All returning (a)

I'd like to also search for any time I see this: <p>(a)(3)

So I need the second paren and its value returned like (3)

And I do not want any other paren + value like the (a) or the (10)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

两相知 2024-10-21 14:10:15

像这样的事情怎么样?

preg_match_all("=(?:<p[^>]*>(:?Note)?|</?i>)\((.*)\)(?:\((.*)\))?=siU", $str, $matches);

How about something like this?

preg_match_all("=(?:<p[^>]*>(:?Note)?|</?i>)\((.*)\)(?:\((.*)\))?=siU", $str, $matches);
标点 2024-10-21 14:10:15

您可能正在寻找这个:

$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>" ;
}

echo's :

(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>" ; 
}

echo's:

<p>(a)(3)
<p>Note(ddd)ssssss(a)(3)
<i>dkdkdjkdjkdjkjdkjdk(3)
</i>(a)(3)

you may be looking for this:

$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>" ;
}

echo's :

(3)
(3)
(3)
(3)

if you need to match the whole line you may use:

preg_match_all('/(<.*?>([\w]+)?(\(.*?\))?(\(3\)))/i', $string, $result, PREG_PATTERN_ORDER);
for ($i = 0; $i < count($result[1]); $i++) {
echo   $result[1][$i]."<br>" ; 
}

echo's:

<p>(a)(3)
<p>Note(ddd)ssssss(a)(3)
<i>dkdkdjkdjkdjkjdkjdk(3)
</i>(a)(3)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文