PHP:如何只获取括号()之间的单词并清除其他所有单词

Jon*_*han 6 php

我有一个包含一些信息的数组.例如:

(作家)&

要么

(附加对话)

我想清理这个,所以我只得到括号()之间的文本并清除其他所有内容

结果:

作家

要么

额外的对话

Cha*_*rch 12

最简单的方法是使用正则表达式:

preg_match_all('/\((.*?)\)/', $input, $matches);
Run Code Online (Sandbox Code Playgroud)

$matches[1],$matches[2]等等将包含$ input中括号之间的所有内容.也就是说,$matches[1]将具有第一组括号之间的任何内容,依此类推(处理具有多个集合的情况).


OIS*_*OIS 8

$string = "this (is (a) test) with (two parenthesis) duh";
Run Code Online (Sandbox Code Playgroud)

对于这样的字符串,您可以使用preg_match_all并使用implode.

$string = "this (is (a) test) with (two parenthesis) duh";
$regex = '#\((([^()]+|(?R))*)\)#';
if (preg_match_all($regex, $string ,$matches)) {
    echo implode(' ', $matches[1]);
} else {
    //no parenthesis
    echo $string;
}
Run Code Online (Sandbox Code Playgroud)

或者你可以使用preg_replace,但是如果有多个括号,你将丢失它们之间的空格.

$regex = '#[^()]*\((([^()]+|(?R))*)\)[^()]*#';
$replacement = '\1';
echo preg_replace($regex, $replacement, $string);
Run Code Online (Sandbox Code Playgroud)

我从这个页面获得了很多帮助,PHP正则表达式更精细.