正确的正则表达式删除单词之后或之前的空格

时间:2011-04-14 16:55:03

标签: php regex preg-replace

我正在使用下面的正则表达式字符串来查找在这种情况下只会紧跟一个空格的单词。我在这里失踪了什么?这将删除任何和所有空格,但我需要一些左。我只是试图删除紧跟一个空格的单词,我该怎么做呢。一个例子是输入。 (一二三)第一个替换应删除“三”,第二个替换应删除“一个”只留下两个。如果我只想要三个我只会使用第二行代码。我的主要问题是在这里获得正确的正则表达式模式。

preg_replace('/\s[A-z]/', '', $data);
preg_replace('/[A-z]\s/', '', $data);

3 个答案:

答案 0 :(得分:2)

[A-z]只匹配一个字母 - 它也不正确,因为您应该声明[a-zA-Z]以匹配所有字母大写和小写。

尝试:

/\s[a-zA-Z]+/

/[a-zA-Z]+\s/

之后,您的代码应如下所示:

preg_replace('/\s[a-zA-Z]+/', '', $data);
preg_replace('/[a-zA-Z]+\s/', '', $data);

答案 1 :(得分:1)

最大的问题是,在你的例子中,“Two”前面还有一个空格。因此,第一次替换将删除“两个”和“三个”(一旦您将[A-z]更改为[A-Za-z]+,即可。

我想你想要这样的东西:

/\s[a-z]+(?!\s)/i
/(?<!\s)[a-z]+\s/i

请注意添加+量词。没有它,[a-z]只会匹配一个字符,所以你的“一二三”的例子可能会导致“On w hree”。

此外,[A-z]在技术上导致未定义的行为(并且可能抛出异常),因为大写字母A到小写字母z不是有效范围。您需要[A-Za-z]或使用[a-z]进行不区分大小写的匹配,就像我上面所做的那样。

答案 2 :(得分:0)

添加+以获取A和z之间的一个或多个字符。

preg_replace('/[A-Za-z]+\s/', '', $data);
preg_replace('/\s[A-Za-z]+/', '', $data);