首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在某个字符串之后得到第一个数字,后面跟着任何数据,直到该数字

在某个字符串之后得到第一个数字,后面跟着任何数据,直到该数字
EN

Stack Overflow用户
提问于 2016-05-23 11:36:06
回答 3查看 7.1K关注 0票数 5

我有一个数据,从数据库中检索并包含我需要的信息。文本是以一种自由的形式输入的,因此它是以许多不同的方式编写的。唯一可以肯定的是,我正在查找给定字符串之后的第一个数字,但在该字符串之后(在数字之前)也可以是任何文本。

我尝试过这样做(其中mytoken是我肯定知道的字符串),但这不起作用。

代码语言:javascript
复制
/(mytoken|MYTOKEN)(.*)\d{1}/
/(mytoken|MYTOKEN)[a-zA-Z]+\d{1}/
/(mytoken|MYTOKEN)(.*)[0-9]/
/(mytoken|MYTOKEN)[a-zA-Z]+[0-9]/

甚至mytoken也可以用大写、小写或大写和小写字符混合编写。表达式是否不区分大小写?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-05-23 11:48:13

您不需要任何延迟匹配,因为您想要匹配,任何数量的非数字符号,直到第一个数字。最好用\D*来完成

代码语言:javascript
复制
/(mytoken)(\D*)(\d+)/i

regex演示

模式的细节如下:

  • (mytoken) -第1组匹配的mytoken (情况不敏感,因为有/i修饰符)
  • (\D*) -第2组匹配数字以外的零个或多个字符
  • (\d+) -第3组匹配1位或更多位数.

注意,\D也匹配换行符,.需要一个DOTALL修饰符来匹配跨换行符。

票数 7
EN

Stack Overflow用户

发布于 2016-05-23 11:40:12

您需要使用惰性量词。您可以通过在regex:.*?中的星号量词后面加上问号来做到这一点。否则,数字将由点运算符匹配,直到最后一个数字,这将由\d匹配。

Regex:/(mytoken|MYTOKEN)(.*?)\d/

Regex演示

票数 2
EN

Stack Overflow用户

发布于 2016-05-23 11:48:35

您可以使用相反的方法:

代码语言:javascript
复制
/(mytoken|MYTOKEN)(\D+)(\d)/

这说明:我的标记,后面跟着任何,而不是数字,后面跟着数字。(懒惰的)点星汤并不总是你最好的选择。在本例中,所需的数字将在$3中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37389926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档