【问题标题】:How do I find the index of a regex match in a string?如何在字符串中找到正则表达式匹配的索引?
【发布时间】:2011-09-18 22:58:59
【问题描述】:

在 php 中,查找和捕获与给定正则表达式匹配的所有子字符串相当简单,但是有没有一种简单的方法可以找到字符串中第一个正则表达式匹配的索引?

即我想要这样运行的东西:

$str = "123456789abcdefgh";
$index = preg_index("#abcd#", $str);
// $index == 9

【问题讨论】:

  • 你试过strpos()吗?
  • strpos() 只进行字符串匹配,而不是正则表达式,虽然你可以在匹配时这样做,但这似乎很愚蠢。

标签: php regex


【解决方案1】:

PREG_OFFSET_CAPTURE 标志与preg_match 一起使用:

$str = "123456789abcdefgh";
$index = -1;
if(preg_match("#abcd#", $str, $matches, PREG_OFFSET_CAPTURE)) {
    $index = $matches[0][1];
}

上面的[0] 对应于正则表达式中您想要其索引的捕获组(0 表示整个表达式,1 表示第一个捕获组(如果存在)等),而[1] 是固定索引,如文档所述。

编辑:添加了if 以使代码更美观,现在并不认为模式肯定会匹配。

See it in action.

【讨论】:

  • 很好的答案,正是我想要的。
猜你喜欢
  • 1970-01-01
  • 2010-09-11
  • 1970-01-01
  • 1970-01-01
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多