PHP/REGEX:获取括号内的字符串

Posted

技术标签:

【中文标题】PHP/REGEX:获取括号内的字符串【英文标题】:PHP/REGEX: Get a string within parentheses 【发布时间】:2012-06-30 06:09:37 【问题描述】:

这是一个非常简单的问题,但我在任何地方都找不到解决方案。

我尝试使用 preg_match 或 preg_match_all 从括号内获取字符串,但没有括号

到目前为止,我的表情是这样的:

\([A-Za-z0-9 ]+\)

并返回以下结果:

3(空心突出显示)928-129(

(空心突出显示)(

我想要的是括号内的字符串,但没有括号。它看起来像这样:

镂空高光

之后我可能会用 str_replace 或其他东西替换括号,但这对我来说似乎不是一个非常优雅的解决方案。

我必须添加什么,所以括号不包含在结果中?

感谢您的帮助,你们太棒了! :)

【问题讨论】:

你所说的括号实际上是括号。 php: Best way to extract text within parenthesis?的可能重复 【参考方案1】:

除了转义括号之外,您只需要添加捕获括号。

<?php
    $in = "hello (world), my name (is andrew) and my number is (845) 235-0184";
    preg_match_all('/\(([A-Za-z0-9 ]+?)\)/', $in, $out);
    print_r($out[1]);
?>

这个输出:

Array ( [0] => world [1] => is andrew [2] => 845 ) 

【讨论】:

感谢您的回答。这很好用(除了转义的反斜杠)。但是括号有什么帮助呢?我以为我的表达是这样读的:“一个开括号,后跟一个由字母、数字和空格组成的字符,然后是一个闭括号”。 (非转义)括号如何在这里发挥作用?谢谢您的帮助! :) 糟糕,对转义的反斜杠感到抱歉;现在修好了。非转义括号有一个特殊的含义:捕获。看,默认情况下,整个匹配被捕获到[0],这就是为什么$out[0] 包含所有内容,甚至是你不想要的括号。每个() 捕获,嗯,捕获 它们之间的任何内容,并将它们存储在顺序数组索引中,即[1][2][3] 等。例如,如果您的字符串是“abc123def456”并且您的正则表达式是/abc(\d+)(\w+)(\d)(\d+)/,您的捕获将是这样的:[1] = "123"、[2] = "def"、[3] = "4" 和 [4] = "56 "。 preg_matchpreg_match_all的区别在于后者顾名思义会匹配所有,这样数组中就会有一个数组:[1] = "world", "is andrew", "845" 谢谢 acheong87。我试着自己阅读它,但我没有明白。不过你的解释很好,我现在明白了。非常感谢! :)【参考方案2】:

尝试:

preg_match('/\((.*?)\)/', $s, $a);

输出:

Array
(
    [0] => (hollow highlight)
    [1] => hollow highlight
)

【讨论】:

以上是关于PHP/REGEX:获取括号内的字符串的主要内容,如果未能解决你的问题,请参考以下文章

使用 jQuery 或 Javascript 获取括号内的字符串

PHP/regex:如何获取 HTML 标签的字符串值?

js 正则表达式获取小括号内的内容,不含括号

用列数据替换括号内的字符串

方括号内的 Impala/Hive 字符串提取

javascript获取带有中文和括号的字符串