当前位置:  开发笔记 > 编程语言 > 正文

Php Regex在字符串中的第一个全大写字母后插入字符

如何解决《PhpRegex在字符串中的第一个全大写字母后插入字符》经验,为你挑选了1个好方法。

我正在尝试使用preg_replace或类似的php函数来: - 识别字符串中的第一个全部大写字母, - 并在其后面直接插入一个字符(破折号或分号) - 全部大写字母应该是3个字符长或更长.

到目前为止,我有正则表达式:

/(?

但是,这不仅仅是3个字符的单词.我也不确定我是否"严格"只看第一个字.

我相信,一旦我将正则表达式整理出来 - 这个

$string = "LONDON On November 12th twelve people...";
$replaced_string = preg_replace('/myregex/',': ', $string);

将输出如下

LONDON: On November 12th twelve people..."

Elias Van Oo.. 5

这是一个相当简单的正则表达式,真的:

$replacedString = preg_replace('/\b([A-Z]{3,})\b/', '$1: ', $string);

它的工作原理如下:

\b:字边界.这会检测"单词"的开头和结尾

([A-Z]{3,}):匹配3个或更多大写字符.括号捕获匹配的这一部分,因此我们可以在替换字符串中使用它

\b:另一个词边界

将此匹配替换为:

'$1: ':$1指回第一个捕获的组(3个或更多大写字符).对此,我们添加了一个冒号和一个空格.这将是我们的替换字符串

这将在3个或更多字符的所有大写单词后添加冒号和空格.要仅替换1个单词,只需将限制传递给preg_replace:

$replaced = preg_replace('/\b([A-Z]{3,})\b/', '$1: ', $string, 1);

最后一个参数是你想要替换的匹配数.-1表示所有,1表示1,2表示2,等等...

演示

根据您的示例字符串判断,大写单词是城市名称.城市名称可能包含短划线,甚至是空格.要解决此问题,您可能希望匹配包含大写字符,短划线和空格的所有字符串:

$replaceAll = preg_replace('/\b([A-Z -]{2,}[A-Z])\b/', '$1: ', $string);
演示2

改变了什么:

([A-Z -]{2,}:捕获匹配从大写字符开始(2个或更多,而不是3),但也匹配空格和短划线.

[A-Z]):捕获组的最后一个字符必须是大写字符,这样可以避免捕获尾随空格或短划线.结果是我们捕获了诸如"纽约""FOO-TOWN"之类的东西,而不是"ON - Something".

其余的和以前一样.如果要允许可能出现的其他字符(如点),只需将它们添加到捕获组的第一部分即可.最完整的模式可能是这样的:

$replaced = preg_replace('/\b([A-Z][A-Z .-]+[A-Z])\b/', '$1: ', $string);

这可以确保捕获的组开始,并以大写字符结尾,并在其间包含任意数量的大写字符,空格,点和破折号.因此,这将匹配像"ST.LEWIS",也



1> Elias Van Oo..:

这是一个相当简单的正则表达式,真的:

$replacedString = preg_replace('/\b([A-Z]{3,})\b/', '$1: ', $string);

它的工作原理如下:

\b:字边界.这会检测"单词"的开头和结尾

([A-Z]{3,}):匹配3个或更多大写字符.括号捕获匹配的这一部分,因此我们可以在替换字符串中使用它

\b:另一个词边界

将此匹配替换为:

'$1: ':$1指回第一个捕获的组(3个或更多大写字符).对此,我们添加了一个冒号和一个空格.这将是我们的替换字符串

这将在3个或更多字符的所有大写单词后添加冒号和空格.要仅替换1个单词,只需将限制传递给preg_replace:

$replaced = preg_replace('/\b([A-Z]{3,})\b/', '$1: ', $string, 1);

最后一个参数是你想要替换的匹配数.-1表示所有,1表示1,2表示2,等等...

演示

根据您的示例字符串判断,大写单词是城市名称.城市名称可能包含短划线,甚至是空格.要解决此问题,您可能希望匹配包含大写字符,短划线和空格的所有字符串:

$replaceAll = preg_replace('/\b([A-Z -]{2,}[A-Z])\b/', '$1: ', $string);
演示2

改变了什么:

([A-Z -]{2,}:捕获匹配从大写字符开始(2个或更多,而不是3),但也匹配空格和短划线.

[A-Z]):捕获组的最后一个字符必须是大写字符,这样可以避免捕获尾随空格或短划线.结果是我们捕获了诸如"纽约""FOO-TOWN"之类的东西,而不是"ON - Something".

其余的和以前一样.如果要允许可能出现的其他字符(如点),只需将它们添加到捕获组的第一部分即可.最完整的模式可能是这样的:

$replaced = preg_replace('/\b([A-Z][A-Z .-]+[A-Z])\b/', '$1: ', $string);

这可以确保捕获的组开始,并以大写字符结尾,并在其间包含任意数量的大写字符,空格,点和破折号.因此,这将匹配像"ST.LEWIS",也

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有