不匹配带有正则表达式的数字

时间:2013-11-27 11:22:10

标签: regex

我尝试匹配(在此匹配后)一行中的所有单词除了包含数字的那些单词之外,例如在一行中我有:

After this match word word1 worldtwo word3 word4 wordfive 502 875 

我想只匹配没有数字的单词,结果应该是:

word worldtwo wordfive

该行中的字数可能会改变

我尝试过这场比赛([a-zA-Z] *),但它只匹配一个单词

请看这里: http://www.rubular.com/r/HykbS2Eajk

我正在使用带有正则表达式的cakephp,但我只需要使用正则表达式

5 个答案:

答案 0 :(得分:3)

您可以使用此模式:

(?:match|\G(?<!^)).*?(\b[a-zA-Z]+\b)

它是THIS“几乎”一般方法的变体......您可以查看它以获取更多详细信息......

Live DEMO

答案 1 :(得分:0)

您可以使用字边界:

 (\b[a-zA-Z]+\b)

单词边界是单词字符和非单词字符之间的零宽度限制。单词字符是[a-zA-Z0-9_],因为这个类也包含数字,你不能在字母和数字之间有单词边界。

要获得先前匹配后的结果(在示例中为After this match),您可以使用此模式(在PHP中,而不是rubular):

/(?>After this match|\G(?<!^)(?>\W*\S*[0-9]\S*)*)\W+\K\b[a-z]+\b/i

答案 2 :(得分:0)

After this select.*?\s([^\d\s]+)(?:\s|$)

我们首先匹配'After this select',然后不情愿(尽可能少)任何角色,然后是空格,然后捕捉任何不是数字而不是空格的东西 - 换句话说,我们是捕获没有数字的单词 - 然后是空格或字符串结尾锚,以确保我们不捕获部分单词。

如果您反复匹配,您要查找的字符串将位于您捕获的组中。

答案 3 :(得分:0)

嗯,你可以使用两种正则表达式模式来做到这一点:

<强> INPUT

After this match word word1 worldtwo word3 word4 wordfive 502 875

首先获得此次匹配后的所有字符

<强>模式

(?<=After this match )(.+?$)

<强>输出

word word1 worldtwo word3 word4 wordfive 502 875

然后使用第二个模式获得没有数字的单词:

<强>模式

\b[^\d\s]+?\b

<强>输出

word
worldtwo
wordfive

在此测试:

gskinner.com/RegExr/

我现在正试图想出一个模式版本,所以如果我能设法做到这一点,我会编辑我的帖子:)

修改

这是一个正则表达式版本:

(?:(?<!\s)After this match|\G).+?(\b[^\d\s]+?\b)

您可以在组1

中获得匹配

<强>输出

匹配1:After this match word 第1组:word

第2场比赛:word1 worldtwo 第1组:worldtwo

第3场比赛:word3 word4 wordfive 第1组:wordfive

答案 4 :(得分:0)

我从答案中获取了一些代码,我修改了我的php:

preg_match_all ("/(?:After this match|\G(?<!^)).*?(\b[a-zA-Z]+\b)/i", $content, $docteur); //1
print_r( $docteur[1][0].' '.$docteur[1][1].' '.$docteur[1][2].' '.$docteur[1][3].' '.$docteur[1][4].' '.$docteur[1][5]);

因此,我的标准(没有数字)

中的第5个单词将被删除