我试图将一个单词的所有匹配重复到括号中。
$text = '{yes yes no yes} yes {yes no}';
“是”一词的所需输出:
Array
(
[1] => Array
(
[0] => Array
(
[0] => yes
[1] => 1
)
)
[1] => Array
(
[0] => Array
(
[0] => yes
[1] => 5
)
)
[2] => Array
(
[0] => Array
(
[0] => yes
[1] => 12
)
)
[3] => Array
(
[0] => Array
(
[0] => yes
[1] => 22
)
)
)
我尝试过以下正则表达式,但它只返回最新位置的单词:
preg_match_all("#\{[^}]*(yes)[^{]*\}#", $text, $matches, PREG_OFFSET_CAPTURE);
我尝试了很多其他解决方案,但没有任何效果。有什么想法吗?
答案 0 :(得分:0)
您可以创建一个正则表达式以匹配结尾}
,然后执行另一个正则表达式。
<?php
$string = "{yes yes no yes} yes";
$matches = array();
preg_match_all("/yes[^}]*/", $string, $matches);
echo print_r($matches, true);
$final_matches = array();
preg_match_all("/yes/", "{".$matches[0][0], $final_matches, PREG_OFFSET_CAPTURE);
echo print_r($final_matches, true);
最终输出:
Array
(
[0] => Array
(
[0] => Array
(
[0] => yes
[1] => 1
)
[1] => Array
(
[0] => yes
[1] => 5
)
[2] => Array
(
[0] => yes
[1] => 12
)
)
)
答案 1 :(得分:0)
您可以尝试使用以下正则表达式使用正向前瞻来匹配yes
中存在的所有字符串{}
,
<?php
$string = "{yes yes no yes} yes {yes no}";
preg_match_all("#yes(?=[^{}]*})#", $string, $matches, PREG_OFFSET_CAPTURE);
echo print_r($matches);
?>
<强>输出:强>
Array
(
[0] => Array
(
[0] => Array
(
[0] => yes
[1] => 1
)
[1] => Array
(
[0] => yes
[1] => 5
)
[2] => Array
(
[0] => yes
[1] => 12
)
[3] => Array
(
[0] => yes
[1] => 22
)
)
)