Php 正则表达式作为grep工作,而不是preg_match

Php 正则表达式作为grep工作,而不是preg_match,php,regex,grep,Php,Regex,Grep,我编译了一个正则表达式(基于其他文章),当在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]))([,]?[-.

我编译了一个正则表达式(基于其他文章),当在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})$/
它应该匹配(并且在文本Wrangler中匹配):

它不匹配:

2000 12 4
11/11/1111
40.13.2013
对于preg_match和grep,是否有我遗漏的内容需要转义或以不同的格式进行格式化

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


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

试试看


你能展示一下你是如何在preg_match中使用它的吗?这是一个很长的正则表达式。你可以通过拆分它的各个部分并查看它何时崩溃来进行调试。smerny-标准用法:if(preg_match($pattern,$myStr))…你还可以告诉我们你使用的是什么操作系统吗?grep使用的默认regex风格在不同的系统中可能有所不同。另外,是否有任何命令行参数被传递到TextWrangler中的grep命令?我在OSX 10.8上,没有我知道的命令行参数。只有股票文本牧马人。它似乎在那里工作,没有那么多的其他测试工具,我发现。让我再次测试一下……我想这可能是一个线索,正则表达式可以很好地与jQuery和Javascript配合使用,但不能与PHP配合使用。PHP正则表达式中是否有与Javascript/jQuery不同的东西?我怀疑\\/模式是问题所在,但我不确定我想我不需要s修饰符。我试图用它来验证用户输入是否至少被格式化为表单中日期字段的日期。但是谢谢你的建议
2000 12 4
11/11/1111
40.13.2013
preg_match('#THE_REGEX_PATTERN#is',$myStr,$matches);