2012-10-24 38 views
0

对你来说可能真的很简单正则表达式大师:)我是正则表达式的noob,只是拿起了一些PHP,但想学习(一旦这个项目完成,我会关节并破坏正则表达式)。 我想了解如何编写一个可能包含一些数据但必须包含其他数据的正则表达式。Noob正则表达式(匹配可能包含并必须有)

我的例子是,匹配可能以数字开头,但不一定,但是如果是这样,我需要数字和下面的两个单词。如果它不是以数字开头,只是前两个单词。数据将在字符串的开头。

下面将匹配:

  • 123富勒街,Fiveways(123富勒街返回(没有逗号))
  • 我们的房子村(我们的房子返回)
  • 7 Eightnine(7 Eightnine返回)

感谢

+0

7 Eightnine不会返回2个字,因为你声称..它返回一个数字和一个字 – Anirudha

+0

@ Fake.It.Til.U.Make.It,'我的例子是,比赛可能以数字开头,但不但是如果有的话,我需要数字和下面的两个单词。[7 Eightnine]在这种情况下,数字“7”和“Eightnine”将被返回,因为只有一个单词可用。我没有看到任何奇怪的内容... – CustomX

+0

为了记录,没有人关心你到底是什么水平,尤其是如果你自称自己是一个noob,那么只能用相关信息来制定问题。我编辑了这个问题,但是这个问题已经完整>。<。只是所以人们不认为这是一个很好的问题,这种语言是可怕的。 – HopefullyHelpful

回答

4

像这样的东西应该工作:

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

可以编码之前对其进行测试地方,比如http://rubular.com/,它通常更容易。

这意味着什么:

^- >开始行的

​​- >非捕获组(由标记:),由若干位和空间,因为我们遵循了吗?通过?,它是可选的。

\w+(?:\s\w+)? - >几个字母数字字符(查找\ w的含义),然后再选择一个空格和另一个“单词”,再次在非捕获组中。

整个事情被封装在一个捕获组中,所以组1将包含您的匹配。

+0

在Rubular中效果很好,并且我已经通过解释了解了更多关于分组的知识,但是我在代码中丢失了某些内容。我有'$ title = preg_match('#^((?:\ d + \ s)?\ w +(?:\ s \ w +)?)#','$ 1',$ address);' '等于xpath查询的结果。如果我'回声$地址',我看到什么应该包含匹配,但如果我'回声$标题'它是空的。我错过了什么? – MrG

+0

想出来,我的preg_match应该是'preg_match('#^((?:\ d + \ s)?\ w +(?:\ s \ w +)?)#',$ address,$ title);'。感谢您的正则表达式 – MrG

+0

我现在只能阅读评论!很高兴帮助=) – pcalcao

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个字..

+0

这也有用,并感谢解释;它真的帮助我学习。 – MrG

相关问题