正则表达式:获取括号外的内容

cro*_*ocr 3 php regex preg-match-all

我正在使用 PHP,我有这样的文字:

first [abc] middle [xyz] last
Run Code Online (Sandbox Code Playgroud)

我需要了解括号内外的内容。在 StackOverflow 中搜索,我找到了一个模式来获取里面的内容:

preg_match_all('/\[.*?\]/', $m, $s)
Run Code Online (Sandbox Code Playgroud)

现在我想知道获取外部内容的模式。

问候!

cod*_*ict 6

您可以将preg_split其用作:

$input ='first [abc] middle [xyz] last';
$arr = preg_split('/\[.*?\]/',$input);
print_r($arr);
Run Code Online (Sandbox Code Playgroud)

输出:

Array
(
    [0] => first 
    [1] =>  middle 
    [2] =>  last
)
Run Code Online (Sandbox Code Playgroud)

这允许输出中有一些周围的空间。如果你不想要它们,你可以使用:

$arr = preg_split('/\s*\[.*?\]\s*/',$input);
Run Code Online (Sandbox Code Playgroud)

preg_split根据模式拆分字符串。此处的模式[后跟任何后跟]. 匹配任何东西的正则表达式是.*. 也[]是用于焦炭类正则表达式的元字符。由于我们想从字面上匹配它们,因此我们需要对它们进行转义以获取\[.*\]. .*默认情况下是贪婪的,并会尝试尽可能多地匹配。在这种情况下,它将匹配abc] middle [xyz. 为了避免这种情况,我们通过?给它附加一个to give 来使它变得不贪婪\[.*?\]。因为我们在这里定义的任何东西实际上意味着除了]我们也可以使用的任何东西\[[^]]*?\]

编辑:

如果要提取 内外的单词,[]可以使用:

$arr = preg_split('/\[|\]/',$input);
Run Code Online (Sandbox Code Playgroud)

将字符串拆分为 a[或 a]