我尝试匹配(在此匹配后)一行中的所有单词除了包含数字的那些单词之外,例如在一行中我有:
After this match word word1 worldtwo word3 word4 wordfive 502 875
我想只匹配没有数字的单词,结果应该是:
word worldtwo wordfive
该行中的字数可能会改变
我尝试过这场比赛([a-zA-Z] *),但它只匹配一个单词
请看这里: http://www.rubular.com/r/HykbS2Eajk
我正在使用带有正则表达式的cakephp,但我只需要使用正则表达式
答案 0 :(得分:3)
答案 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
在此测试:
我现在正试图想出一个模式版本,所以如果我能设法做到这一点,我会编辑我的帖子:)
修改强>
这是一个正则表达式版本:
(?:(?<!\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个单词将被删除