简单的正则表达式问题:如何找到第一个括号并获取其中的内容?

时间:2009-11-24 22:36:29

标签: php regex

我是PHP的正则表达式的新手。 如何找到第一个括号的内容,其中包含一段长的字符串。

我假设我必须使用preg_match函数

5 个答案:

答案 0 :(得分:2)

preg_match("/^.*?\(([^\)]+)\)/", $search_this_string, $matches, PREG_OFFSET_CAPTURE);
print_r($matches);

这假设您的括号内引用的字符串不包含任何转义(以某种方式)关闭parens。

答案 1 :(得分:2)

只要您不想支持匹配的括号,"/\\(([^()])\\)/"就会这样做。

如果你想支持任意嵌套的parens,简短的答案就是你做不到。这是因为正则表达式无法捕获嵌套parens的字符串(无上下文语言)。你需要某种解析器库才能做到这一点。但是对于大多数情况,上面的简单版本应该可以正常工作。

答案 2 :(得分:2)

不需要正则表达式,只需要普通的PHP字符串函数

$str = "

yada yada yada
yada
yada yada
yada (bada bada
bada bada

bada) yada yada yada
yada yada
yada yada yada
( yo yo )
";

$s = explode(")",$str,2);
$what_i_want=$s[0];
$m = strpos($what_i_want,"(");  #find where opening brace is
print substr($what_i_want,$m+1); #print from opening brace onwards

答案 3 :(得分:1)

<?php
$str = "The quick (brown fox) jumps (over) the (lazy) dog.";
$first_match = preg_replace('/.*?\((.+?)\).*/', '$1', $str);
var_dump($first_match);
  

string(9)“brown fox”

注意:不适用于嵌套括号。

答案 4 :(得分:1)

$s = "

yada yada yada
yada
yada yada
yada (bada bada
bada bada

bada) yada yada yada
yada yada
yada yada yada
( yo yo )
";

preg_match('/\((.*?)\)/ms', $s, $m);
print_r($m[1]);

在preg match模式结束时,'/\((.*?)\)/ms','m'表示多行,'s'表示“让点也表示换行符。”