我试图使用一个preg_replace或类似的php函数:-识别字符串中的第一个全大写字母单词,-并在它后面直接插入一个字符(破折号或分号即可)-全大写字母单词应该是3个字符长或者更多。
到目前为止,我有一个正则表达式:
/(?<!\ )([^A-Z{3,}])/
但是,这并不适用于只有3个字符的单词。我也不确定我是否“严格地”只看第一个单词。
我相信一旦我理清了正则表达式-这
$string = "LONDON On November 12th twelve people...";
$replaced_string = preg_replace('/myregex/',': ', $string);
将输出如下
LONDON: On November 12th twelve people..."
这是一个相当简单的正则表达式,真的:
$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);
改变了什么:
([A-Z-]{2,}
:捕获匹配以大写字符(2或更多,不是3)开始,但也匹配空格和破折号。[A-Z])
:捕获组的最后一个字符必须是大写字符,这样可以避免捕获尾随空格或破折号。结果是,我们捕捉到了像“纽约”或“FOO-TOWN”这样的东西,但没有捕捉到“ON”这样的东西。其余的和以前一样。如果您想允许出现其他字符(如点),只需将它们添加到捕获组的第一部分即可。最完整的模式可能是这样的:
$replaced = preg_replace('/\b([A-Z][A-Z .-]+[A-Z])\b/', '$1: ', $string);
这确保捕获的组以大写字符开始和结束,并且在它们之间包含任意数量的大写字符、空格、点和破折号。所以这也会和“圣路易斯”一样
问题内容: 我想在angularjs中大写字符串的第一个字符 当我用它转换整个字符串为大写。 问题答案: 使用此大写过滤器
我有一个函数,应该把字符串中每个单词的第一个字母大写,但不知何故,它提供了不正确的结果,知道为什么吗?我需要修理一下。 所以输入:hello dolly输出:hello dolly。 空格计算正确,但大写不正确。
问题内容: 我有一个字符串:“ hello good old world”,我想将每个单词的每个首字母大写,而不是使用.toUpperCase()整个字符串。是否有现成的java助手可以完成这项工作? 问题答案: 看看ACL WordUtils。
我试图编写一个函数,将字符串中每个单词的第一个字母大写(将字符串转换为标题大小写)。 例如,当输入是时,我希望是输出。然而,该函数返回。 这是我的代码:
将一个字符串的第一个字母(大写字母)变成小写。 使用数组解构和 String.toLowerCase() 将第一个字母变成小写,...rest 是获取第一个字母之后字符数组,然后使用 Array.join('') 使其再次拼接成为字符串。 省略 upperRest 参数来保持字符串的其余部分不变,或者将其设置为 true 来将字符串的其余部分转换为大写。 const decapitalize =
问题内容: Java中是否内置了一个函数,该函数可以大写字符串中每个单词的第一个字符,而不会影响其他单词? 例子: jon skeet -> Jon Skeet miles o’Brien-> Miles O’Brien(B仍然是大写字母,这排除了标题大小写) old mcdonald-> Old Mcdonald* (Old McDonald也可以找到,但我不认为它会那么聪明。) 快速浏览一下J