3

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

我的例子是,比赛可以以数字开头,但不是必须的,但如果是这样,我需要数字和以下 2 个单词。如果它不以数字开头,则只需前 2 个单词。数据将位于字符串的开头。

以下将匹配:

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

谢谢

4

2 回答 2

11

像这样的东西应该工作:

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

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

这是什么意思:

^ -> 行首

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

\w+(?:\s\w+)?-> 几个字母数字字符(查找 \w 的含义),后跟可选的空格和另一个“单词”,同样位于非捕获组中。

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

于 2012-10-24T11:32:26.493 回答
1

将此正则表达式与多行选项一起使用

^(\d+(\s*\b[a-zA-Z]+\b){1,2}|(\s*\b[a-zA-Z]+\b){1,2})

Group1包含您所需的数据

\d+表示匹配数字,即\d1 到多次+

\s*表示匹配空间,即\s0 到多次*

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

于 2012-10-24T11:31:46.067 回答