在使用正则表达式和php时,无论如何都要跳过第一场比赛。
或者是否有某种方法可以使用str_replace实现此目的。
由于
更新 我试图从另一个字符串中删除字符串的所有实例,但我想保留第一次出现,例如
$toRemove = 'test';
$string = 'This is a test string to test to removing the word test';
输出字符串为:
这是 test 的测试字符串,用于删除单词 test
答案 0 :(得分:4)
preg_replace('/((?:^.*?\btest\b)?.*?)\btest\b/', '$1', $string);
我们的想法是匹配并捕获在每个匹配项之前的任何内容,并将其重新插入。(?:^.*?test)?
会导致test
的第一个实例被列入捕获。 (所有\b
都是为了避免部分字匹配,例如test
或smartest
中的testify
。
答案 1 :(得分:3)
简易PHP方式:
<?php
$pattern = "/an/i";
$text = "banANA";
preg_match($pattern, $text, $matches, PREG_OFFSET_CAPTURE);
preg_match($pattern, $text, $matches, 0, $matches[0][1]);
echo $matches[0];
?>
会给你“AN”。
更新:不知道它是替代品。试试这个:
<?php
$toRemove = 'test';
$string = 'This is a test string to test to removing the word test';
preg_match("/$toRemove/", $string, $matches, PREG_OFFSET_CAPTURE);
$newString = preg_replace("/$toRemove/", "", $string);
$newString = substr_replace($newString, $matches[0][0], $matches[0][1], 0);
echo $newString;
?>
找到第一场比赛并记住它的位置,然后删除所有内容,然后将第一场比赛放回去。
答案 2 :(得分:0)
假设'blah'是你的正则表达式模式,blah(blah)将匹配并捕获第二个
答案 3 :(得分:0)
迟到的答案,但它可能对人们有用。
$string = "This is a test string to test something with the word test and replacing test";
$replace = "test";
$tmp = explode($replace, $string);
$tmp[0] .= $replace;
$newString = implode('', $tmp);
echo $newString; // Output: This is a test string to something with the word and replacing