如何在字符串中获取正则表达式匹配的位置?

时间:2012-03-05 17:36:13

标签: php regex string

我知道如何使用preg_match和preg_match_all来查找给定字符串中正则表达式模式的实际匹配,但我写的函数不仅需要匹配的文本,而且能够遍历字符串AROUND the匹配...

因此,我需要根据正则表达式模式知道字符串中匹配的位置。

我似乎找不到类似于strpos()的函数允许正则表达式...任何想法?

3 个答案:

答案 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。