更正Regex以删除单词前后的空格


Correct Regex to remove spaces after or before a word

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

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

[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);

最大的问题是,在您的示例中,"Two"前面也有一个空格。因此,第一次替换将删除"2"answers"3"(一旦您将[A-z]更改为[A-Za-z]+,即)。

我想你想要这样的东西:

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

注意+量词的添加。否则,[a-z]将只匹配一个字符,因此您的" one Two Three"示例可能会导致"On w Three"。

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

在A和z之间添加一个或多个字符。

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