匹配任意数字或“X”结尾的单词

时间:2013-08-09 16:10:00

标签: regex

尝试匹配所有这些:

{_someWord1} ... $1=someWord, $2=1
{_another82} ... $1=another, $2=82 (item in question)
{_testX}     ... $1=test, $2=X

我的正则表达式:{_(\w+)(\d+|X)}匹配所有三个,但第二个项目的组是:

{_another82} ... $1=another8, $2=2

我希望能够在$2中包含任意数量的数字,并且只保留$1中的字词。我需要提前看一下吗?

2 个答案:

答案 0 :(得分:3)

在大多数正则表达式中,您可以使用ungreedy repetition,尽可能少地使用{{3}}(与默认值相反):

{_(\w+?)(\d+|X)}

但是,如果数字前面的部分永远不能包含数字和下划线(包含在\w中),那么您可以简单地使用更具体的字符类:

{_([a-zA-Z]+)(\d+|X)}

答案 1 :(得分:1)

尝试使用非贪婪的匹配(在?之后添加\w+)以尽可能少地使用并仍然匹配:

{_(\w+?)(\d+|X)}

或者如果您的语言(未指定)支持环视,那么:

{_(\w+)(?<=[a-zA-Z])(\d+|X)}

断言第1组的最后一个字符必须是一个字母(尽管字母可能出现在第1组的其他地方)