我是PHP的正则表达式的新手。 如何找到第一个括号的内容,其中包含一段长的字符串。
我假设我必须使用preg_match函数
答案 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'表示“让点也表示换行符。”