【发布时间】:2016-05-31 04:28:51
【问题描述】:
我无法从字符串中获取“今天”值。该模式是将字符串放在双花括号内,将字符串放在双花括号外。
我只得到“内部”值。模式是:
/({{(?P<inside>[^}{]+)}}|}}(?P<outside>[^}{]+){{)/
字符串是
{{Friday}}today{{Sunday}}
php代码为:
$returnValue = preg_match_all('/({{(?P<inside>[^}{]+)}}|}}(?P<outside>[^}{]+){{)/', '{{Friday}}today{{Sunday}}', $matches);
这仅返回:
array (
0 =>
array (
0 => '{{Friday}}',
1 => '{{Sunday}}',
),
1 =>
array (
0 => '{{Friday}}',
1 => '{{Sunday}}',
),
'inside' =>
array (
0 => 'Friday',
1 => 'Sunday',
),
2 =>
array (
0 => 'Friday',
1 => 'Sunday',
),
'outside' =>
array (
0 => '',
1 => '',
),
3 =>
array (
0 => '',
1 => '',
),
)
上面的数组中没有任何关于“今天”的内容。
有趣的是,当模式的各个部分相互替换时,结果中没有“Sunday”或“Suterday”值,而是“today”。
看起来只考虑模式的第一部分。
获取所有值的模式是什么? 谢谢。
已编辑:
1. 感谢非常棒的答案。但我必须稍微扩展一下这个问题。我测试了你的所有提议,它们对字符串很有用
{{Friday}}today{{Sunday}}
但它们不适用于这样的字符串:
{{Friday}}t{od{a}y{{Sunday}}
结果中应该是这样的值
t{od{a}y
因为只有双花括号应该是分隔符。
我试图让您的出色模式适应这些要求,但没有成功。子字符串 '}}' 和 '{{' 应该被否定。不仅是单个 '{' 或 '}'。
如何获得?
2. 另一个问题但不是那么重要的是“内部”和“外部”结果数组不应该有空字符串。在图片上看到我的意思: enter image description here
【问题讨论】:
-
维克托,这是个好主意。真的很简单。即使它没有将结果分配给“外部”和“内部”键。但这可以在 php.ini 中进行管理。谢谢。
-
检查this demo。如果这是您需要的,我明天会尽快发布。
-
干得好。这正是我所需要的。我真的很感谢你的帮助。它甚至适用于这样的字符串:“star t{{Friday}}t{od{a}y{{Sunday}}en d”。
标签: php regex preg-match-all