Regex查找方括号内的字符串


Regex to find string within square brackets

我需要创建三个正则表达式来提取方括号内的多个单词,使用preg_match_all()

示例

输入字符串:

Lorem〔ipsum〕dolor sit〔amet〕,nam you dolores defracto definitionem。在这里,有一片顽强的大海,对着科蒂迪埃奎。库图利特·多洛雷斯向vix提供[提奥弗拉斯图斯]。Cum homes erroribus to assureverit,无可争议的是democritum eum ut ipsum nec timeam和Persius。假定的原则是憎恶法律,而不是简单的原则。[[东]]]在sint malis,和equdem骚扰inciderint海,[[vocibus]]id mentitum海。

1。单支架的期望输出

[0 ] => Array
        (
           [0 ] => ipsum
           [1 ] => Theophrastus
       )

2。双方括号的期望输出

[0 ] => Array
       (
           [0 ] => amet
           [1 ] => summo
       )

3。三方括号的期望输出

[0 ] => Array
       (
           [0 ] = > East
           [1 ] => vocibus
       )

感谢您的帮助!

尝试以下操作:

preg_match_all("/'[('s*['w]*'s*)']/", $input, $output, PREG_PATTERN_ORDER);

Demo

更新:

对于1个

preg_match_all('/[^'[]'[([^'[].*)']/U', $text, $matches)

对于2个

preg_match_all('/[^'[]'['s?'[([^'[].*)']/U', $text, $matches)

对于3

preg_match_all('/[^'[]'[{3}([^'[].*)']/U', $text, $matches)

演示

这个看起来不太可读的正则表达式应该可以工作:

$s = 'Lorem [ ipsum ] dolor sit [[ amet ]] , nam you dolores detracto definitionem . Et admodum fabellas patrioque here , offendit an obstinate sea , vis at [[ summo ]] alienum cotidieque . Quo tollit dolores cu viderer [ Theophrastus ] to vix . Cum homes erroribus to assueverit , putant vocent democritum eum ut ipsum nec timeam and Persius . Putant suscipit abhorreant jus cu . Pri doctus feugiat facilisis not. [[[ East ]]] in sint malis , and Equidem harassment inciderint sea , [[[ vocibus ]]] id mentitum sea .';
if (preg_match_all('/(?<!'[)'[(?!'[)([^]]*)'](?!'[)/', $s, $m))  // single [...]
   print_r($m[1]);
if (preg_match_all('/(?<!'[)'['[(?!'[)([^]]*)']'](?!'[)/', $s, $m)) // double [[...]]  
   print_r($m[1]);
if (preg_match_all('/(?<!'[)'['['[(?!'[)([^]]*)']']'](?!'[)/', $s, $m)) // triple [[[...]]]
   print_r($m[1]);

输出:

Array
(
    [0] =>  ipsum
    [1] =>  Theophrastus
)
Array
(
    [0] =>  amet
    [1] =>  summo
)
Array
(
    [0] =>  East
    [1] =>  vocibus
)