php - 正则表达式拆分 TitleCase Word

标签 php regex pcre

我的正则表达式并不能真正用于在 PHP 中拆分 TitleCase 单词。 没有作者的文章不应受到正则表达式的影响。

我当前的正则表达式: From (\S+\s){2}(?<=[a-z])(?=[A-Z])

这是我的 Regex

输入:

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 Rossman</b> This is the article <br>From Harry Gregson-Williams</b> Another article text <br>From Nora Waldstätten</b> Some lorem ipsum stuff From the fantastic architect of the year Text without an author

最佳答案

使用 {2} 量词,您的模式将扩展为 \S+\s\S+\s,但小写字母和大写字母之间没有空格。

您可以使用

'~From\s+(\S+\s\S+)(?![^\p{Lu}])~u'

请参阅regex demo

详细信息

  • 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}*)*)

参见this regex demo 。这里,\p{Lu} 匹配一个大写字母,\p{Ll}* 匹配 0+ 个小写字母。

请注意,为了更轻松地访问,您甚至可以删除捕获组并使用 \K 运算符来忽略匹配值中迄今为止匹配的文本:

'~From\h+\K\p{Lu}\p{Ll}*(?:[\h-']\p{Lu}\p{Ll}*)*~u'

参见this regex demo .

请注意,在使用 \p{Lu} 等 Unicode 属性类和 Unicode 字符串时,应使用 u 修饰符。

关于php - 正则表达式拆分 TitleCase Word,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47513726/

相关文章:

php - 名字字段被插入到电子邮件中两次

php - Codeigniter:连接 3 个表并在 View 中显示数据

php - Mailgun API 仅适用于一封电子邮件

regex - 如何清理在PERL中用作文件名的字符串?

json - 在 R 中向 json 添加引号

java - 替换字符串中单词之间的前导和尾随逗号以及重复逗号

regex - 如何从日志文件中 grep 错误但过滤掉错误警报?

php - 将新的命名键添加到 preg_match_all 的匹配项中

php - 替换大括号内字符串中的所有空格

regex - perl正则表达式获取不在括号或嵌套括号中的逗号