我知道如何使用preg_match和preg_match_all来查找给定字符串中正则表达式模式的实际匹配,但我写的函数不仅需要匹配的文本,而且能够遍历字符串AROUND the匹配...
因此,我需要根据正则表达式模式知道字符串中匹配的位置。
我似乎找不到类似于strpos()的函数允许正则表达式...任何想法?
答案 0 :(得分:71)
您可以使用标记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
),
1 =>
array (
0 => 'bar',
1 => 3,
),
)
答案 1 :(得分:5)
preg_match有一个可选标志PREG_OFFSET_CAPTURE
,用于记录原始'haystack'中匹配出现的字符串位置。请参阅“标志”部分:http://php.net/preg_match
答案 2 :(得分:0)
在preg_match()上使用PREG_OFFSET_CAPTURE,您将获得模式匹配的次数。如果匹配,则将具有从0开始的偏移值。
使用此值,您可以使用offset参数再次调用preg_match。