【问题标题】:Regex works as grep, not with preg_match正则表达式用作 grep,而不是 preg_match
【发布时间】:2013-09-16 14:08:26
【问题描述】:

我编译了一个正则表达式(基于其他帖子),在 Text Wrangler 中使用 grep 进行测试时完美匹配多种日期格式,但是当我将它放入 PHP 并与 preg_match 一起使用时,它什么都不匹配。

这是正则表达式:

/^(((?:0?[1-9]|1[012])|(?:0?[1-9]|[12][0-9]|3[01])|([a-zA-Z]+))([.]?[-.\\/\s]))?(((?:0?[1-9]|1[012])|(?:0?[1-9]|[12][0-9]|3[01]))([,]?[-.\\/\s]))?((?:20|19)[0-9]{2})$/

它应该匹配(并且在 Text Wrangler 中匹配):

03/12/2000
4 4 2011
16 04 1985
11/11/1911
04.13.2013
May 12, 1912
July 13 2012
March 1999
2015
1944

不匹配:

2000 12 4
11/11/1111
40.13.2013

对于 preg_match 和 grep 有什么我遗漏的应该转义或格式不同的东西

【问题讨论】:

  • 你能说明你是如何使用 preg_match 的吗?
  • 这是一个很长的正则表达式。您可以通过拆分它的各个部分并查看它何时损坏来进行调试。
  • smerny - 标准用法:if (preg_match($pattern,$myStr)) ...
  • 您能告诉我们您使用的是什么操作系统吗? grep 使用的正则表达式的默认风格可能因系统而异。此外,是否有任何命令行参数被传递给 TextWrangler 中的 grep 命令?
  • 我在 OSX 10.8 上,没有我知道的命令行参数。只是股票文本牧马人。

标签: php regex grep


【解决方案1】:

您需要使用“s”标志使其“dotall”匹配(包括换行符)

preg_match('#THE_REGEX_PATTERN#is',$myStr,$matches);

【讨论】:

  • 我不认为我想要 s 修饰符。我正在尝试使用它来基本上验证用户输入至少被格式化为表单中日期字段的日期。不过谢谢你的建议
【解决方案2】:

它正在开发正则表达式测试工具。

试试看

http://toolspot.org/regex_tester.php

【讨论】:

  • 它似乎在那里工作,而不是我发现的其他测试工具。让我再测试一下……
  • 我认为这可能是一个线索,正则表达式适用于 jQuery 和 Javascript,但不适用于 PHP。 PHP 正则表达式中是否有与 Javascript/jQuery 不同的东西?我怀疑 \\/ 模式是问题所在,但我不确定
猜你喜欢
  • 2013-06-19
  • 1970-01-01
  • 2012-01-05
  • 1970-01-01
  • 2014-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多