首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Noob regex poser (匹配可能包含并且必须包含)

问Noob regex poser (匹配可能包含并且必须包含)
EN

Stack Overflow用户
提问于 2012-10-24 11:28:06
回答 2查看 12.6K关注 0票数 4

我是regex的新手,刚学过一些PHP,但我想学习(一旦这个项目完成,我就开始学习正则表达式了)。我想了解如何组成一个正则表达式,该正则表达式可能包含一些数据,但必须包含其他数据。

我的例子是,比赛可能以数字开始,但不一定要,但是如果需要,我需要数字和下面的两个单词。如果它不是以一个数字开头,只需前两个单词。数据将位于字符串的开头。

以下将与之相匹配:

  • 前街123号,五条路(前街123号(无逗号))
  • 我们的房子村(我们的房子回来了)
  • 7人(7人返回)

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-24 11:32:26

像这样的事情应该有效:

^((?:\d+\s)?\w+(?:\s\w+)?)

在编写代码之前,您可以在像http://rubular.com/这样的地方测试它,通常比较容易。

它的意思是:

^ ->行的开头

(?:\d+\s)? ->是一个非捕获组(标记为?:),由几个数字和一个空格组成,因为我们遵循?,所以它是可选的。

\w+(?:\s\w+)? ->几个字母数字字符(查找\w的意思),在非捕获组中可选地后面跟着一个空格和另一个"word“。

整个过程都封装在一个捕获组中,所以组1将包含您的匹配项。

票数 12
EN

Stack Overflow用户

发布于 2012-10-24 11:31:46

使用此regex和多行选项

代码语言:javascript
复制
^(\d+(\s*\b[a-zA-Z]+\b){1,2}|(\s*\b[a-zA-Z]+\b){1,2})

Group1包含所需的数据

\d+的意思是匹配数字,即\d 1到多倍+

\s*的意思是匹配空间,即\s 0到多次*

(\s*\b[a-zA-Z]+\b){1,2}匹配1到2个单词。

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

https://stackoverflow.com/questions/13048307

复制
相关文章

相似问题

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