我正在使用gskinner regex帮助程序站点从字符串中捕获日期,它工作正常.但我的PHP脚本中的抛出和错误.
我正在寻找的是字符串中的日期.
2013年11月26日晚上10:17
$string = "The following web lead was received at Nov 26 2013 10:17PM Source: 420 Source: Internet - Organic (Free) Leads Referral Fee: none"; $datePattern = '/(?<=received at )(?:[^])*?(?=Source)/'; preg_match($datePattern,$string,$matches); print_r($matches);
我得到的错误是
警告:preg_match():编译失败:缺少终止]对于第114行C:\ wamp\www\test\index.php中偏移36处的字符类
我不明白为什么它在gskinner工具中工作正常但在我的脚本中失败了.这个正则表达式是社区提交的表达式之一,因为我在正则表达式方面完全不称职.
谢谢你的帮助.
这是因为[^]
.
有些javascript实现[^]
意味着文字"所有可能的字符"(否定无效).但是在php中,如果它在开始括号或否定符号之后立即立即显示为正方形括号^
.因此[^])*?(?=Source)
被视为未闭合的角色类.
此表示法的目的是匹配所有可能的字符(一种快捷方式[\s\S]
),您可以将其替换为:
$datePattern = '/(?<=received at ).*?(?=Source)/s';
您可以在这篇令人难以置信的帖子中阅读有关这类符号的更多信息.