preg_match_all() - 在括号内使用文本,但不显示空格

时间:2012-12-05 15:01:57

标签: php regex preg-match-all

我想从包含{!括号的字符串创建一个数组!}。但是,不应显示封装字符串开头和结尾的空格。

$string = "{! This should be in the output !} this should not be in the output {!show_in_output!} don't show {!   show   !}";
preg_match_all("/{!(.*)!}/Us", $string , $output);

结果数组如下所示:

Array
(
    [0] => Array
        (
            [0] => {! This should be in the output !}
            [1] => {!show_in_output!}
            [2] => {!   show   !}
        )

    [1] => Array
        (
            [0] =>  This should be in the output 
            [1] => show_in_output
            [2] =>    show   
        )

)

但它应该是这样的:

Array
(
    [0] => Array
        (
...
        )

    [1] => Array
        (
            [0] => This should be in the output 
            [1] => show_in_output
            [2] => show   
        )

)

有没有办法通过修改后的正则表达式实现这一目标? 谢谢!

1 个答案:

答案 0 :(得分:1)

(.*)中间的/{!(.*)!}/匹配{!!}之间的任何字符。如果您不想在之前和之后捕获空格,则必须匹配空格而不包括组中的空格,因此在您的情况下:/{!\s*(.*?)\s*!}/?表示要对.*进行最小匹配,以便它不包含您希望与第二个\s*匹配的空白。