Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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_Regex_Pcre - Fatal编程技术网

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字母 )+:结束非

我的正则表达式在PHP中不适合拆分标题库单词。 没有作者的文章不应受到正则表达式的影响


我当前的正则表达式:
来自(\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