RegEx和PHP - 如何匹配非强制参数

时间:2014-02-13 14:50:24

标签: php regex match

我正在使用此RegEx:

\s*((\w*\.*\s*)+[.*(\w)]+(?=\d{4}))(\d{4}\s*\,)*

目标是将单词与最后一个以点结尾的单词匹配,4位数的跟随者以逗号结尾。

这是test.2014,

它工作正常。现在,我想增加在“测试”之间有一个空格(\ s)的可能性。和“2014”,但是空格不是强制性参数,如果存在则应该匹配。

请问如何将其添加到我的正则表达式中?我们如何设置非强制性参数?

谢谢。

4 个答案:

答案 0 :(得分:1)

尝试这种模式

\s*((\w*\.*\s*)+[.*(\w)]+\s*(?=\d{4}))(\d{4}\s*\,)*

\s*时间空间为零或更多。我在日期模式之前添加了它

或尝试:

\s*((\w*\.*\s*)+[.*(\w)]+(?=\s*\d{4}))(\s*\d{4}\s*\,)*

答案 1 :(得分:1)

有几种方法可以做到这一点。您可以使用问号,星号,或者您可以指定可行事件的范围,如下表所示。

Regular Expressions Quantifiers
*   0 or more
+   1 or more
?   0 or 1
{3} Exactly 3
{3,}    3 or more
{3,5}   3, 4 or 5

\s*((\w*\.*\s*)+[.*(\w)]+(\s+)(?=\d{4}))(\d{4}\s*\,)*
\s*((\w*\.*\s*)+[.*(\w)]+(\s*)(?=\d{4}))(\d{4}\s*\,)*
\s*((\w*\.*\s*)+[.*(\w)]+\s{0,1}(?=\d{4}))(\d{4}\s*\,)*

答案 2 :(得分:1)

  

目标是将单词与最后一个以点结尾的单词匹配,   4位数的跟随者以逗号结尾

(?:\s*\w+)*\s*\w+\.\d{4},
  

现在,我想增加一个空格的可能性(\ s)   之间的“测试”。和“2014”,但空白不是强制性的   参数,

(?:\s*\w+)*\s*\w+\.\s*\d{4},

答案 3 :(得分:0)

试试这个

/\s*((\w*\.*\s*)+[.*(\w)]+(\s*)(?=\d{4}))(\d{4}\s*\,)*/