PHP RexExp匹配和替换
我正在使用在线regexr.com工具测试RegExp。我将用多个用例测试字符串,但我无法让替换工作 匹配字符串的RexEx为:PHP RexExp匹配和替换,php,regex,Php,Regex,我正在使用在线regexr.com工具测试RegExp。我将用多个用例测试字符串,但我无法让替换工作 匹配字符串的RexEx为: /^[0-9]{1,3}[0-9]{6,7}$/ 它与我所在国家的本地手机号码匹配,如下所示: 0921234567 但我想用这种方式替换数字:加上“+”号,加上我的国家代码“123”,加上“.”号,最后,加上匹配的数字,前面加上零 最终人数为: +385.921234567 我有插入匹配字符串的基本想法,但我不确定如何在字符前加前缀,并在以下替换模式中从匹配字符串
/^[0-9]{1,3}[0-9]{6,7}$/
它与我所在国家的本地手机号码匹配,如下所示:
0921234567
但我想用这种方式替换数字:加上“+”号,加上我的国家代码“123”,加上“.”号,最后,加上匹配的数字,前面加上零
最终人数为:
+385.921234567
我有插入匹配字符串的基本想法,但我不确定如何在字符前加前缀,并在以下替换模式中从匹配字符串中去掉零:
\+$&\n\t
我将使用PHP preg_replace函数
编辑:
正如有人明智地提到的,可能会有一个、两个或没有零,但我将使用regex创建单独的测试用例,只测试零的数量。在一个正则表达式中这样做现在似乎很复杂
可能的数字如下:
0921234567
00111921234567
其中111是国家代码。我知道有些国家/地区代码由2或3位数字组成,但我将为大多数国家/地区代码创建特殊情况
^[0-9]([0-9]{1,2}[0-9]{6,7})$
您只需添加组
。替换为+385.$1
。请参阅演示
您只需添加组
。替换为+385.$1
。请参阅演示
您可以使用此
preg_replace
从手机的开头去除可选的零:
您可以使用此
preg_replace
从手机的开头去除可选的零:
我将使用两步解决方案:
+
+国家代码
+
+编号替换该编号
^[0-9]{7,10}$
与^[0-9]{1,3}[0-9]{6,7}$
相同,意思是从字符串的开始到结束匹配7到10位数字
使用
/^0+/
regex可以很容易地从一开始就修剪前导零。我将使用两步解决方案:
+
+国家代码
+
+编号替换该编号
^[0-9]{7,10}$
与^[0-9]{1,3}[0-9]{6,7}$
相同,意思是从字符串的开始到结束匹配7到10位数字
使用
/^0+/
regex可以很容易地从一开始就修剪前导零。如果开头有多个零呢?或者根本没有零?如果输入为0021234567
,则输出为+385.021234567
。零仍然存在。我不确定这是否是预期的。@stribizhev那么OP的正则表达式将不匹配。为什么要在正则表达式的开头使用[0-9]
而不是0
?如果第一个数字不是零,如果正则表达式不匹配,可能会更好。如果开头有多个零呢?或者根本没有零?如果输入为0021234567
,则输出为+385.021234567
。零仍然存在。我不确定这是否是预期的。@stribizhev那么OP的正则表达式将不匹配。为什么要在正则表达式的开头使用[0-9]
而不是0
?如果正则表达式不匹配,如果第一个数字不是零,可能会更好。00111921234567
的预期输出是什么?好的,我看到你接受了答案,尽管我会使用@vks,问得好。我必须去掉开头的所有零。@AlanKis所以00111921234567
应该变成+385111921234567
??//@AlanKis你可以去掉最后的范围限制并使用:$str=preg\u replace(“~^0*(\d{7,})$~,“+385.$1,$str)代码>。00111921234567
的预期输出是什么好的,我看到你接受了答案,尽管我会使用@vks,这是个好问题。我必须去掉开头的所有零。@AlanKis所以00111921234567
应该变成+385111921234567
??//@AlanKis你可以去掉最后的范围限制并使用:$str=preg\u replace(“~^0*(\d{7,})$~,“+385.$1,$str)代码>。这个答案最符合我的问题。有可能会有一个、两个或零都没有。阿努巴瓦,仍在踢屁股,你应该得到一件t恤衫。在模式中tilde是什么意思?PHP允许任何字符用作正则表达式分隔符/
或~
或#
被广泛用作分隔符。这个答案最适合我的问题。有可能会有一个、两个或零都没有。阿努巴瓦,仍在踢屁股,你应该得到一件t恤衫。在模式中tilde是什么意思?PHP允许任何字符用作正则表达式分隔符/
或~
或#
被广泛用作分隔符。
$re = "/^[0-9]([0-9]{1,2}[0-9]{6,7})$/m";
$str = "0921234567\n";
$subst = "+385.$1";
$result = preg_replace($re, $subst, $str);
$str = preg_replace('~^0*(\d{7,9})$~', '+385.$1', $str);
$re = "/^[0-9]{7,10}$/";
$str = "0921234567";
if (preg_match($re, $str, $match)) {
echo "+385." . preg_replace('/^0+/', '', $match[0]);
}