Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 我如何编写正则表达式来匹配单引号内的任何内容,除了诸如“MM/DD/YYYY”之类的日期格式之外?_Regex - Fatal编程技术网

Regex 我如何编写正则表达式来匹配单引号内的任何内容,除了诸如“MM/DD/YYYY”之类的日期格式之外?

Regex 我如何编写正则表达式来匹配单引号内的任何内容,除了诸如“MM/DD/YYYY”之类的日期格式之外?,regex,Regex,在$i中=选择“MM/DD/YYYY”,“JOHN”由dual创建 我希望正则表达式只获取JOHN,而不是MM/DD/YYYY 我试过这样的方法: 您可以部分地通过正则表达式来实现这一点,部分地使用我假设的PHP中使用的正则表达式语言,但应该与其他语言非常相似 首先,匹配所有不需要的模式,然后使用alternaltion,将带引号的字符串模式与组中捕获的引号之间的子字符串匹配。然后,在调用语言中,收集所有非null的首次捕获组: preg_match_all("~'MM/DD/YYYY'|'DD

在$i中=选择“MM/DD/YYYY”,“JOHN”由dual创建

我希望正则表达式只获取JOHN,而不是MM/DD/YYYY

我试过这样的方法:


您可以部分地通过正则表达式来实现这一点,部分地使用我假设的PHP中使用的正则表达式语言,但应该与其他语言非常相似

首先,匹配所有不需要的模式,然后使用alternaltion,将带引号的字符串模式与组中捕获的引号之间的子字符串匹配。然后,在调用语言中,收集所有非null的首次捕获组:

preg_match_all("~'MM/DD/YYYY'|'DD/MM/YYYY'|'YYYY/MM/DD'|'(.*?)'~", $i, $matches);
$non_dates = array_filter($matches[1]);

演示:

我想出了“MM\/DD\/YYYY”\124; DD\/MM\/YYYY | yyy\/MM\/DD\'*跳过*失败|[^']*\'。顺便说一句,这是Perl正则表达式或PCRE,提问者给出的链接表明了这一点,尽管她在问题中没有提到。它的工作方式是两个表达式相匹配:要么是引号中的日期格式,后跟我们稍后将介绍的一些动词,要么是引号,后跟任意数量的非引号字符,以及结束引号。现在,如果第一个选项,即日期匹配,特殊动词*SKIP表示停止回溯,这是必要的,因为否则r.e.引擎将尝试将结尾引用与man 3 pcrepattern页面中的第二个备选方案相匹配:*SKIP表示在匹配之前匹配的任何文本都不能成为成功匹配的一部分。这也是中篇引文的目的。动词*FAIL表示立即从手册页中删除该正则表达式:该动词导致匹配失败,强制执行回溯。这相当于?!但是更容易阅读。换句话说,如果到目前为止我们已经匹配了子表达式,则中止并继续。与*SKIP一起,这将强制匹配在主题中的这一点结束,并继续后续文本。

它适用于此正则表达式-\'\|M{2}D{2}Y{2,4}.*?M{2}D{2}Y{2,4}.*?M{2}D{2}Y{2,4}.*


看一看。

当你说“MM/DD/YYYY”时,你的字面意思是“MM/DD/YYYY”,就像你在正则表达式中尝试的那样,还是真的是指实际的日期字符串,比如“10/11/2012”?您是否关心严格验证日期,例如字符串“99/99/9999”应该仍然匹配,因为它是无效的日期?我的字面意思是日期格式字符串“MM/DD/YYYY”。但问题中的“任何日期格式”,我指的是“MM/DD/YYYY”,“DD/MM/YYYY”等。这不是很具体。。。MY/YD/MMDY是有效格式吗?是否确实要匹配[MDY]{2}\/[MDY]{2}\/[MDY]{4}??!我关心的不是日期格式。也就是说,要在单引号内提取除有效日期格式以外的模式,我使用以下3种格式中的任意一种—“MM/DD/YYYY”或“DD/MM/YYYY”或“YYYY/MM/DD”。哪种特定的正则表达式格式/语言?与BRE或ERE相比,ERE更容易做到这一点。我认为这需要在报价日期后加上收盘价。如果这对你有效,那很好,尽管你在问题中没有规定。您需要只使用扩展RE还是PCRE Perl语法作为选项?您使用的是什么工具或语言?我很好奇为什么我的答案不适合你。
preg_match_all("~'MM/DD/YYYY'|'DD/MM/YYYY'|'YYYY/MM/DD'|'(.*?)'~", $i, $matches);
$non_dates = array_filter($matches[1]);