Noob regex poser(匹配可能包含并且必须具有)

时间:2012-10-24 11:28:07

标签: regex

对你来说可能真的很简单正则表达式大师:)我是正则表达式的菜鸟,只是拿起了一些PHP,但想要​​学习(一旦这个项目完成,我就会垮掉并破解正则表达式)。 我想了解如何编写可能包含某些数据的正则表达式,但必须包含其他数据。

我的例子是,匹配可以从数字开始,但不必,但如果确实如此,我需要数字和以下2个单词。如果它不是以数字开头,只是前两个单词。数据将位于字符串的开头。

以下内容将匹配:

  • 123 Fore Street,Fiveways(123 Fore Street返回(无逗号))
  • 我们的乡村(我们的房子归来)
  • 7 Eightnine(7 Eightnine返回)

由于

2 个答案:

答案 0 :(得分:7)

这样的事情应该有效:

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

您可以在编码之前在http://rubular.com/之类的地方进行测试,通常更容易。

含义:

^ - >行的开头

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

\w+(?:\s\w+)? - >几个字母数字字符(查看\ w表示什么),然后可选地,一个空格和另一个“单词”,再次在非捕获组中。

整个事情都封装在一个捕获组中,因此第1组将包含您的匹配。

答案 1 :(得分:1)

将此正则表达式与多行选项

一起使用
^(\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个单词..