我正在尝试获取一个重复到括号中的单词的所有匹配项。
$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
)
)
)
我尝试过以下regex,但它只返回最新位置的单词:
preg_match_all("#'{[^}]*(yes)[^{]*'}#", $text, $matches, PREG_OFFSET_CAPTURE);
我尝试过许多其他解决方案,但都不起作用。知道吗?
您可以尝试下面的regex,它使用正向前瞻来匹配{}
、中存在的所有字符串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
)
)
)
您可以创建一个正则表达式来匹配结束的}
,然后执行另一个正则表达。
<?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);
https://eval.in/196020
最终输出:
Array
(
[0] => Array
(
[0] => Array
(
[0] => yes
[1] => 1
)
[1] => Array
(
[0] => yes
[1] => 5
)
[2] => Array
(
[0] => yes
[1] => 12
)
)
)