【问题标题】:RegEx and PHP - How to match with a non mandatory parameterRegEx 和 PHP - 如何匹配非强制参数
【发布时间】:2014-02-13 14:50:23
【问题描述】:

我正在使用这个正则表达式:

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

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

这是一个测试。2014,

而且效果很好。现在,我想在“测试”之间添加一个空格(\s)的可能性。和“2014”,但空格不是强制参数,如果有则应该匹配。

能否请您帮助我如何将其添加到我的正则表达式中?我们如何设置非强制参数?

谢谢。

【问题讨论】:

  • 我很确定 [.*(\w)]+ 与您的想法不符。
  • 正则表达式匹配 ......(.*(()...

标签: php regex match


【解决方案1】:

试试这个模式

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

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

或者试试:

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

【讨论】:

  • 谢谢维克多。你能详细说明你做了什么吗?
【解决方案2】:

有几种方法可以做到这一点。您可以使用问号、星号,也可以指定可行出现的范围,如下表所示。

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*\,)*

【讨论】:

  • 谢谢,既然我已经添加了多个解决方案,介意删除您的评论吗?
  • 我删除了消息。 mind 是什么意思?
  • Milos,您可能还会发现Rubular 有助于解析您的正则表达式。如果 Rubular 不适合您,还有很多其他有用的在线正则表达式解析器。
  • Victor - “介意”就像在说,“您会不会……麻烦您”,或者“您愿意……”。我想这确实来自于要求某人注意您的要求的想法 - 或类似的东西。
【解决方案3】:

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

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

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

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

【讨论】:

    【解决方案4】:

    试试这个

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多