我对使用preg_replace
但是慢慢学习感到困惑。
我需要帮助这个功能:
$str= preg_replace('#\W\d+#', '\W \d+', $str);
我的想法是,我正在寻找直接在他们之前没有空格的数字,
即 abc123 。 (不是'abc 123'而不是'123abc')
如何在两者之间插入空格或字符,以便abc123成为abc 123或abc @@ 123
谢谢大家!
答案 0 :(得分:3)
你想要
$str= preg_replace('#([A-Za-z]+)(\d+)#', '$1 $2', $str);
\W
没有按照你的想法行事; \w
表示“单词字符”,\W
表示“不单词字符”。既然你特别想要字母,那么你想要的也不是,你需要[A-Za-z]
,这是匹配所有字母的字符类。您还需要+
之后才能匹配“一个或多个”。
括号是你如何“捕获”表达式的一部分以供以后参考; $1
和$2
引用括号中捕获的文字。
答案 1 :(得分:2)
<?php
$str = 'abc()1234';
$str= preg_replace('#([a-zA-Z()])(\d+)#', '$1 $2', $str);
echo $str;
输出:
abc()1234
$ 1和$ 2是反向引用,分别引用第一个和第二个捕获的组。更多信息@ http://www.regular-expressions.info/brackets.html。
答案 2 :(得分:0)
您可以在online PHP Regegular expressor tester中看到/([A-Za-z])(\d+)/
和/([A-Za-z]+)(\d+)/
之间的区别。在你的情况下,两者都使用preg_replace。但后者也适用于preg_match_all,所以它更健壮。