我想从包含{!括号的字符串创建一个数组!}。但是,不应显示封装字符串开头和结尾的空格。
$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
)
)
有没有办法通过修改后的正则表达式实现这一目标? 谢谢!
答案 0 :(得分:1)
(.*)
中间的/{!(.*)!}/
匹配{!
和!}
之间的任何字符。如果您不想在之前和之后捕获空格,则必须匹配空格而不包括组中的空格,因此在您的情况下:/{!\s*(.*?)\s*!}/
。 ?
表示要对.*
进行最小匹配,以便它不包含您希望与第二个\s*
匹配的空白。