PHP:如何获取 preg_match_all 的字符串索引?

标签 php regex preg-match-all

假设我有两个正则表达式,

/eat (apple|pear)/
/I like/

和文字

"I like to eat apples on a rainy day, but on sunny days, I like to eat pears."

我想要的是用preg_match得到如下索引:

match: 0,5 (I like)
match: 10,19 (eat apples)
match: 57,62 (I like)
match: 67,75 (eat pears)

有没有什么方法可以使用 preg_match_all 获取这些索引,而无需每次都循环遍历文本?

编辑:解决方案 PREG_OFFSET_CAPTURE !

最佳答案

您可以尝试为 preg_match() 设置 PREG_OFFSET_CAPTURE 标志:

$subject="I like to eat apples on a rainy day, but on sunny days, I like to eat pears.";
$pattern = '/eat (apple|pear)/';
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE );
print_r($matches);

输出

$ php test.php
Array
(
    [0] => Array
        (
            [0] => eat apple
            [1] => 10
        )

    [1] => Array
        (
            [0] => apple
            [1] => 14
        )

)

关于PHP:如何获取 preg_match_all 的字符串索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2451915/

相关文章:

php - 在 jquery 中序列化表单数据会产生不必要的符号。如何避免它们?

php - Codeigniter MySQL 查询

php - 执行对用户 readonlyuser 拒绝的命令

javascript - Google Calendar API 日期输出的正则表达式

java - 德国电话号码格式的正则表达式

php - 在 PHP 中找到两个不同的 substr

php - Mysql 上的多维数组重复数据存储

regex - 用 sed 区分大小写替换已知单词

r - 如果匹配条件,则删除字符串中的最后两个字符

php - "~"字符在 PHP 正则表达式中表示什么?