0

我真的很困惑使用preg_replace但慢慢学习。

我需要有关功能的帮助:

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

这个想法是,我正在寻找直接在它们前面没有空格的字母的数字,

abc123。(不是“abc 123”,也不是“123abc”)

以及如何在两者之间简单地包含空格或字符,以便 abc123 变为 abc 123 或 abc@@123

谢谢大家!

4

3 回答 3

3

你要

$str= preg_replace('#([A-Za-z]+)(\d+)#', '$1 $2', $str);

\W没有做你认为它做的事;\w意思是“单词字符”,\W意思是“不是单词字符”。但是,由于您特别想要letters,因此您想要的也不想要,而 you need[A-Za-z]是匹配所有字母的字符类。您还需要+在它之后添加一个以匹配“一个或多个”。

括号是您如何“捕获”表达式的一部分以供以后参考;$1$2参考您的括号捕获的文本。

于 2009-10-04T23:33:31.310 回答
2
<?php

$str = 'abc()1234';
$str= preg_replace('#([a-zA-Z()])(\d+)#', '$1 $2', $str);

echo $str;

输出:

第1234章

$1 和 $2 是反向引用,分别引用第一个和第二个捕获的组。更多信息@http ://www.regular-expressions.info/brackets.html

于 2009-10-04T23:34:25.147 回答
0

您可以在在线 PHP 正则表达式测试器/([A-Za-z])(\d+)/中看到和之间的区别。在您的情况下,两者都可以与 preg_replace 一起使用。但后者也适用于 preg_match_all,因此更加健壮。/([A-Za-z]+)(\d+)/

于 2009-10-05T05:20:39.867 回答