我需要删除多串像www
,ww2
,www3
从字符串的开头。
例如,如果字符串是www3testme
那么我需要删除www3
并获得testme
唯一的。
下面是我正在使用的代码,但它以某种方式不起作用。
$str = "www3testabc";
$str = mb_ereg_replace("^(www|www3|ww2)", "", $str);
echo $str;
它给出了“3testabc”而不是“testabc”。
不知道我做错了什么。
我只想使用mb_ereg_replace()
函数。
该(www|www3|ww2)
模式包含一个未锚定的交替组。因为www
,第一个分支,比赛www
中www3testabc
,在www3
没有甚至对,正则表达式争夺测试www
并将其删除。因此,数量仍然存在。
请参阅记住正则表达式引擎急切。
您需要从最长到最短(如^(www3|www2|www)
)对备选方案进行排序,或者,在您的情况下,www
在字符串的开头与 0+ 数字匹配并使用更方便
$str = "www3testabc";
$str = mb_ereg_replace("^www[0-9]*", "", $str);
echo $str;
请参阅PHP 演示。
注意您也可以使用 a preg_replace
:
$str = preg_replace("/^www[0-9]*/u", "", $str);
由于UNICODE 修饰符,/^www[0-9]*/u
正则表达式将删除www
任何 0+ 数字,并将正确处理 Unicode 输入/u
。
请注意,如果您无法控制www
,www2
等字符串,并且您动态构建模式,则需要按长度降序对字符串进行排序,然后implode
.
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句