preg_replace regular-expression查找以字母开头的数字

时间:2009-10-04 23:29:53

标签: php regex preg-replace

我对使用preg_replace但是慢慢学习感到困惑。

我需要帮助这个功能:

$str= preg_replace('#\W\d+#', '\W \d+', $str);

我的想法是,我正在寻找直接在他们之前没有空格的数字,

abc123 。 (不是'abc 123'而不是'123abc')

如何在两者之间插入空格或字符,以便abc123成为abc 123或abc @@ 123

谢谢大家!

3 个答案:

答案 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,所以它更健壮。