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_match
和preg_match_all
的区别在于后者顾名思义会匹配所有,这样数组中就会有一个数组:[1] = "world", "is andrew", "845"
。
谢谢 acheong87。我试着自己阅读它,但我没有明白。不过你的解释很好,我现在明白了。非常感谢! :)【参考方案2】:
尝试:
preg_match('/\((.*?)\)/', $s, $a);
输出:
Array
(
[0] => (hollow highlight)
[1] => hollow highlight
)
【讨论】:
以上是关于PHP/REGEX:获取括号内的字符串的主要内容,如果未能解决你的问题,请参考以下文章