php - 需要一个复杂的正则表达式来拆分驼峰式大小写和数字

标签 php regex split preg-split

我需要拆分大写字母和数字,一系列大写字母在字符串中的任何位置拆分为整个单词。仅用示例进行解释可能是最简单的,请参阅下面的测试脚本:

$tests = array('FooBar', 'fooBar', 'Foobar', 'FooBar1', 'FooBAR', 'FooBARBaz', '1fooBar', '1FooBar', 'FOOBar');
foreach($tests as $test){ echo $test . " => " . split_camel_case($test) . "<br />"; }

function split_camel_case($root){
    return implode(' ', preg_split('/(?<=[a-z])(?![a-z])/', $root, -1, PREG_SPLIT_NO_EMPTY));
}

我从中得到的是:

FooBar => Foo Bar
fooBar => foo Bar
Foobar => Foobar
FooBar1 => Foo Bar 1
FooBAR => Foo BAR
FooBARBaz => Foo BARBaz
1fooBar => 1foo Bar
1FooBar => 1Foo Bar
FOOBar => FOOBar

最后四项不正确,应该是:

FooBARBaz => Foo BAR Baz
1fooBar => 1 foo Bar
1FooBar => 1 Foo Bar
FOOBar => FOO Bar

我在另一个 StackOverflow 问题中找到了该模式,但我无法找到任何完全符合我需要的模式。任何帮助将不胜感激。

最佳答案

只需使用 | 添加其他情况作为额外的可能性:

$tests = array('FooBar', 'fooBar', 'Foobar', 'FooBar1', 'FooBAR', 'FooBARBaz', '1fooBar', '1FooBar', 'FOOBar');
foreach($tests as $test){ echo $test . " => " . split_camel_case($test) . "<br />"; }

function split_camel_case($root){
    return implode(' ', preg_split('/(?<=[a-z])(?![a-z])|(?<=[0-9])(?![0-9])|(?<=[A-Z])(?=[A-Z][a-z])/', $root, -1, PREG_SPLIT_NO_EMPTY));
}

关于php - 需要一个复杂的正则表达式来拆分驼峰式大小写和数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30876918/

相关文章:

PHP mysql查询insert where

javascript - 如何使用一个提交按钮更新 2 个表单

java - java中连续大写字母的连字符

javascript - 在 javascript 中使用 PHP 生成 JSON : issues with backslashes

php - 使用 .htaccess 根据文件路径的一部分重定向到新域?

php - $criteria->在 yii 中选择

php - 如何不将表示与逻辑混在一起?

javascript - .split() 保持 split 特征

java - 如何在java中将一个不带空格的字符串分割成多个单词?

python - 在python中拆分多个单词