Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.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
Php 正向前瞻正则表达式_Php_Mysql_Regex_Pattern Matching_Expression - Fatal编程技术网

Php 正向前瞻正则表达式

Php 正向前瞻正则表达式,php,mysql,regex,pattern-matching,expression,Php,Mysql,Regex,Pattern Matching,Expression,我正在构建这个正则表达式,它有着积极的前景。基本上,它必须选择到最后一个句号之前的行中的所有文本,并在末尾添加一个“|”以对其进行分隔。下面是一些示例文本。我正在gskinner和editpadpro中测试这一点,它显然有完全的grep regex支持,所以如果我能在这方面得到答案,我将不胜感激 下面的正则表达式在一定程度上起作用,但我不确定它是否正确。如果文本包含方括号,它也会下降 最后,我想添加另一个忽略规则,如忽略但在选择中包含“Co.”的规则。第二个忽略规则将忽略但包括前面只有一个大写字

我正在构建这个正则表达式,它有着积极的前景。基本上,它必须选择到最后一个句号之前的行中的所有文本,并在末尾添加一个“|”以对其进行分隔。下面是一些示例文本。我正在gskinner和editpadpro中测试这一点,它显然有完全的grep regex支持,所以如果我能在这方面得到答案,我将不胜感激

下面的正则表达式在一定程度上起作用,但我不确定它是否正确。如果文本包含方括号,它也会下降

最后,我想添加另一个忽略规则,如忽略但在选择中包含“Co.”的规则。第二个忽略规则将忽略但包括前面只有一个大写字母的句点。下面也是示例文本。谢谢你的帮助

^(?:[^|]+\|){3}(.*?)[^(?:Co)]\.(?=[^:]*?\:)

121| Ryan, T.N. |2001. |I like regex. But does it like me (2) 2: 615-631.
122| O' Toole, H.Y. |2004. |(Note on the regex). Pages 90-91 In: Ryan, A. & Toole, B.L. (Editors) Guide to the regex functionality in php. Timmy, Tommy& Stewie, Quohog. * Produced for Family Guy in Quohog.

我想我不明白你想做什么。但是这部分肯定是不正确的

使用方括号创建字符类,因为
^
是一个否定类。这意味着在此位置,您不希望匹配其中一个字符
(?:Co)
,换句话说,它将匹配除“?)(:Co”以外的任何其他字符

更新:

我认为这是不可能的。我应该如何区分L.Co.或类似的东西和句子的结尾

但是我在您的正则表达式中发现了另一个错误。最后一部分
(?=[^:]*?\:)
应该是
(?=[^.]*?\:)
如果要将
前面的最后一个点与表达式匹配,它将在第一个点上匹配

看吧

这似乎是你想要的

(.*\.)(?=[^:]*?:)

它非常简单地匹配所有文本,直到冒号前面出现的最后一个句号。

谢谢您的回复。我想选择所有文本,直到“:”前面出现的最后一个句号(点),然后添加一个“|”字符结尾,以便对其进行分隔。Co.部分在那里,因此它跳过,但仍然包括Co.出现的实例,因为这并不是要在这里破坏正则表达式。我还想跳过“L”之类的项这可能是名称等等。非常感谢这正是我想要的。Co或L部分根本不会出现在字符串的末尾,也不会出现在最后一个句号之后,非常感谢再次出现,除非您使用的regexp引擎与Perl的明显不同,[^(?:Co)]匹配的任何单个字符不是“:()“Co”。这肯定不是你的意思,是吗?这样它就允许文本中出现“Co.”,而不将“Co.”视为匹配的结尾。但是你实际上说的是匹配任何以“.”结尾的字符,前面紧跟着一个不属于“()?:Co”的字符。因此它不会匹配“Fine,C”因为.前面的字符是C