我有一个数据,从数据库中检索并包含我需要的信息。文本是以一种自由的形式输入的,因此它是以许多不同的方式编写的。唯一可以肯定的是,我正在查找给定字符串之后的第一个数字,但在该字符串之后(在数字之前)也可以是任何文本。
我尝试过这样做(其中mytoken是我肯定知道的字符串),但这不起作用。
/(mytoken|MYTOKEN)(.*)\d{1}/
/(mytoken|MYTOKEN)[a-zA-Z]+\d{1}/
/(mytoken|MYTOKEN)(.*)[0-9]/
/(mytoken|MYTOKEN)[a-zA-Z]+[0-9]/甚至mytoken也可以用大写、小写或大写和小写字符混合编写。表达式是否不区分大小写?
发布于 2016-05-23 11:48:13
您不需要任何延迟匹配,因为您想要匹配,任何数量的非数字符号,直到第一个数字。最好用\D*来完成
/(mytoken)(\D*)(\d+)/i模式的细节如下:
(mytoken) -第1组匹配的mytoken (情况不敏感,因为有/i修饰符)(\D*) -第2组匹配数字以外的零个或多个字符(\d+) -第3组匹配1位或更多位数.注意,\D也匹配换行符,.需要一个DOTALL修饰符来匹配跨换行符。
发布于 2016-05-23 11:40:12
您需要使用惰性量词。您可以通过在regex:.*?中的星号量词后面加上问号来做到这一点。否则,数字将由点运算符匹配,直到最后一个数字,这将由\d匹配。
Regex:/(mytoken|MYTOKEN)(.*?)\d/
发布于 2016-05-23 11:48:35
您可以使用相反的方法:
/(mytoken|MYTOKEN)(\D+)(\d)/这说明:我的标记,后面跟着任何,而不是数字,后面跟着数字。(懒惰的)点星汤并不总是你最好的选择。在本例中,所需的数字将在$3中。
https://stackoverflow.com/questions/37389926
复制相似问题