假设我们有以下数组:
$regexList = ['/def/', '/ghi/', '/abc/'];
和字符串如下:
$string = '
{{abc}}
{{def}}
{{ghi}}
';
我的想法是从上到下遍历字符串并依赖正则表达式列表,找到结果并将其替换为大写的内容,其中的模式与基于匹配的事件相匹配在字符串顺序上,无论 regexList 数组是什么顺序。
所以,那是我想要的输出:
或在leats
这是我尝试的代码:
$regexList = ['/def/', '/ghi/', '/abc/'];
$string = '
abc
def
ghi
';
$string = preg_replace_callback($regexList, function($match){
return strtoupper($match[0]);
}, $string);
echo '<pre>';
var_dump($string);
此输出只是:
string(15) "
ABC
DEF
GHI
"
如何在 $ string 顺序(从上到下)中获取与这些字符串匹配的偏移量或模式?谢谢。
答案 0 :(得分:1)
不要使用regexp数组,使用带有替代品和捕获组的单个regexp。然后,您可以看到哪个捕获组不为空。
$regex = '/(def)|(ghi)|(abc)/';
$string = preg_replace_callback($regex, function($match) {
for ($i = 1; $i < count($match); $i++) {
if ($match[$i]) {
return strtoupper($match[$i]) . " was matched by pattern " . $i-1;
}
}
}, $string);
答案 1 :(得分:0)
@Barmar是对的,但我会稍微修改一下:
$order = [];
$string = preg_replace_callback('/(def)|(ghi)|(abc)/', function($match) use (&$order) {
end($match);
$order[key($match)] = current($match);
return strtoupper($match[0]);
}, $string);
print_r($order);
输出:
Array
(
[3] => abc
[1] => def
[2] => ghi
)