<分区>
我知道如何使用 preg_match 和 preg_match_all 在给定字符串中查找正则表达式模式的实际匹配项,但我正在编写的函数不仅需要匹配项的文本,而且能够遍历字符串匹配...
因此,我需要根据正则表达式模式知道匹配项在字符串中的位置。
我似乎找不到类似于 strpos() 的函数来允许正则表达式……有什么想法吗?
<分区>
我知道如何使用 preg_match 和 preg_match_all 在给定字符串中查找正则表达式模式的实际匹配项,但我正在编写的函数不仅需要匹配项的文本,而且能够遍历字符串匹配...
因此,我需要根据正则表达式模式知道匹配项在字符串中的位置。
我似乎找不到类似于 strpos() 的函数来允许正则表达式……有什么想法吗?
最佳答案
您可以使用标志PREG_OFFSET_CAPTURE
为此:
preg_match('/bar/', 'Foobar', $matches, PREG_OFFSET_CAPTURE);
var_export($matches);
结果是:
array (
0 =>
array (
0 => 'bar',
1 => 3, // <-- the string offset of the match
),
)
在以前的版本中,此答案在正则表达式中包含一个捕获组(preg_match('/(bar)/', ...)
)。从前几条评论中可以明显看出,这让一些人感到困惑,后来被@Mikkel 编辑掉了。请忽略这些评论。
关于php - 如何获取正则表达式匹配在字符串中的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9571231/