Php 如何将所有单词改为大写,但不包括罗马数字?
我正在尝试修复一些手动键入的地址。我需要申请整个地址,但我想保留所有大写罗马数字和门牌号后的字母Php 如何将所有单词改为大写,但不包括罗马数字?,php,regex,Php,Regex,我正在尝试修复一些手动键入的地址。我需要申请整个地址,但我想保留所有大写罗马数字和门牌号后的字母 通过PIPPO III 74A 应成为: 通过Pippo III 74A 如何实现这一点?通过以下方式选择字符串的大写部分: 完整示例,如何修复手动键入的地址,将单词的第一个字母大写,并保留大写罗马数字和门牌号后的字母a、B、C): 使用a查找非罗马数字的单词: /\b(?![LXIVCDM]+\b)([A-Z]+)\b/ 说明: \b-在单词边界处断言位置 (?!-负前瞻 [LXIVCD
通过PIPPO III 74A
应成为:
通过Pippo III 74A
如何实现这一点?通过以下方式选择字符串的大写部分: 完整示例,如何修复手动键入的地址,将单词的第一个字母大写,并保留大写罗马数字和门牌号后的字母a、B、C): 使用a查找非罗马数字的单词:
/\b(?![LXIVCDM]+\b)([A-Z]+)\b/
说明:
-在单词边界处断言位置\b
-负前瞻(?!
-将列表中的任何字符匹配一次或多次[LXIVCDM]+
-在单词边界处断言位置\b
-负前瞻结束)
-任何大写字母,一次或多次[A-Z]
-在单词边界处断言位置\b
现在,使用捕获这些单词,将其转换为小写,然后将第一个字母大写:
$input = 'VIA PIPPO III 74A';
$pattern = '/\b(?![LXIVCDM]+\b)([A-Z]+)\b/';
$output = preg_replace_callback($pattern, function($matches) {
return ucfirst(strtolower($matches[0]));
}, $input);
var_dump($output);
输出:
string(17)“通过Pippo III 74A”
我已经删除了答案末尾的广告。如果您有自己的网站想要展示,请将其添加到StackOverflow bio中。+1
preg\u replace\u callback
确实是正确的方法。
/\b(?![LXIVCDM]+\b)([A-Z]+)\b/
$input = 'VIA PIPPO III 74A';
$pattern = '/\b(?![LXIVCDM]+\b)([A-Z]+)\b/';
$output = preg_replace_callback($pattern, function($matches) {
return ucfirst(strtolower($matches[0]));
}, $input);
var_dump($output);