Php 正则表达式拆分滴定酶字
我的正则表达式在PHP中不适合拆分标题库单词。 没有作者的文章不应受到正则表达式的影响Php 正则表达式拆分滴定酶字,php,regex,pcre,Php,Regex,Pcre,我的正则表达式在PHP中不适合拆分标题库单词。 没有作者的文章不应受到正则表达式的影响 我当前的正则表达式:来自(\S+\S){2}(?您可以使用此正则表达式来匹配标题案例作者姓名,前面加上来自的: \bFrom(?:[\h-]+\p{Lu}\p{Ll}*)+ 正则表达式分解: \bFrom:将From与单词边界匹配 (?::启动非捕获组 [\h-]+:匹配1+水平空格或连字符 \p{Lu}:匹配1大写unicode字母 \p{Ll}*:匹配0或更多小写unicode字母 )+:结束非
我当前的正则表达式:
来自(\S+\S){2}(?您可以使用此正则表达式来匹配标题案例作者姓名,前面加上来自的:
\bFrom(?:[\h-]+\p{Lu}\p{Ll}*)+
正则表达式分解:
\bFrom
:将From
与单词边界匹配
(?:
:启动非捕获组
[\h-]+
:匹配1+
水平空格或连字符
\p{Lu}
:匹配1
大写unicode字母
\p{Ll}*
:匹配0
或更多小写unicode字母
)+
:结束非捕获组。匹配此组的1
或多个
使用{2}
量词,您的模式将扩展为\S+\S+\S
,但大写字母和小写字母之间没有空格
你可以用
'~From\s+(\S+\s\S+)(?![^\p{Lu}])~u'
见
详细信息
From
-文字子字符串
\s+
-1+空格
(\S+\S\S+)
-组1:一个或多个非空白字符,1个空白字符,再加上1个非空白字符
(?![^\p{Lu}])
-后跟大写字母或字符串结尾
或者,使用更具体的方法:
'~From\s+(\p{Lu}\p{Ll}*\s+\p{Lu}\p{Ll}*)~u'
或者,也支持撇号或连字符:
From\h+(\p{Lu}\p{Ll}*(?:[\h-']\p{Lu}\p{Ll}*)*)
请参见。此处,\p{Lu}
匹配大写字母,\p{Ll}*
匹配0+小写字母
请注意,为了便于访问,您甚至可以摆脱捕获组,使用\K
操作符忽略匹配值以外的匹配文本:
'~From\h+\K\p{Lu}\p{Ll}*(?:[\h-']\p{Lu}\p{Ll}*)*~u'
看
请注意,在使用Unicode属性类(如\p{Lu}
和Unicode字符串)时,应该使用u
修饰符。code
输出
Günther Rossmann的这是本文
来自Harry Gregson Williamsan的其他文章文本
来自Nora WaldstättenSome lorem ipsum的东西
来自年度杰出建筑师
没有作者的文本
解释
(来自\S+\h+\S+(?小写字母后没有第二个空格。您可以使用类似的“快速修复”或尝试这样的解决方案,其中一些应该是作者的名字?谢谢@sinisake,我在回答中已经修复了它。只有一件事:“Harry Gregson Williams”-你的第二个和第三个正则表达式不匹配…@sinisake是的。事实上,我为第二个和第三个版本添加了一个增强版本。现在,它们也将匹配Günther O'Reilly的。
(From \S+\h+\S+(?<=\p{Ll})(?=\p{Lu}))
From Günther RossmannThis is the article
From Harry Gregson-WilliamsAnother article text
From Nora WaldstättenSome lorem ipsum stuff
From the fantastic architect of the year
Text without an author
<b>From Günther Rossmann</b>This is the article
<b>From Harry Gregson-Williams</b>Another article text
<b>From Nora Waldstätten</b>Some lorem ipsum stuff
From the fantastic architect of the year
Text without an author