2009-10-04 102 views
0

我真的很困惑,因为使用preg_replace但是慢慢学习。preg_replace正则表达式查找字母前面的数字

我需要的功能帮助:

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

的想法是,林寻找那个面前有直接的字母,不带空格的数字,

ABC123。 (不是“ABC 123”,而不是“123ABC”)

,我如何简单地包括在之间的空间或性格让ABC123成为ABC 123或ABC @@ 123

感谢大家!

+0

看看这里:http://txt2re.com/它可能会帮助 – SeanJA 2009-10-04 23:32:35

+0

谢谢,但我一直编码太多今晚,看着这让我的头受伤! – bluedaniel 2009-10-04 23:44:03

回答

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

+0

我在示例中使用了preg_match,因此您可以真正了解数组是如何填充的以及可以用于preg_replace的。按照混沌的例子,$ 1和$ 2会引用第一个和第二个捕获的碎片。 – 2009-10-04 23:43:08

+0

感谢您的帮助,您是否可以帮助我的最新评论:'非常好,有用。但对我而言,我可能实际上需要在数字之前检查括号,那么模式也可以使用abc()123? – bluedaniel 2009-10-04 23:45:50

+0

我更新了它,所以它占(和)。 – 2009-10-04 23:47:11

3

你想

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

\W不会做你认为它; \w表示“单词字符”,而\W表示“而非单词字符”。既然你特意要字母,但是,你也不想要,你需要[A-Za-z],这是与所有字母匹配的字符类。之后你还需要一个+以匹配“一个或多个”。

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

+0

非常好,作品一种享受。但对我来说,我可能实际上需要在数字之前检查括号,那么模式也可以使用abc()123? – bluedaniel 2009-10-04 23:43:13

+0

制作[A-Za-z] [A-Za-z()]并在其中包含任何其他字符,但是如果您这样做,则可能需要转义[和]。 – 2009-10-04 23:44:30

+0

感谢那个工作得很好的人。不能告诉你你的帮助 – bluedaniel 2009-10-04 23:52:05

0

您可以在online PHP Regegular expressor tester中看到/([A-Za-z])(\d+)//([A-Za-z]+)(\d+)/之间的差异。在你的情况下,两者都与preg_replace一起工作。但后者也适用于preg_match_all,所以它更加健壮。

相关问题