【问题标题】:How can I add a space in string at capital letters, but keep continuous capitals together using PHP and a Regex?如何在大写字母的字符串中添加空格,但使用 PHP 和 Regex 将连续的大写字母保持在一起?
【发布时间】:2012-01-26 13:14:15
【问题描述】:

我想使用像preg_replace() 和正则表达式这样的PHP 方法在大写字母的字符串上添加一个空格,但我只想在它们连续时在第一个大写字母上添加一个空格。我还希望正则表达式知道连续大写字母串中的最后一个大写字母应该是之前放置空格的下一个大写字母。

这些字符串是示例:

TodayILLiveInTheUSAWithSimon 今日美国 我很无聊

变成:

今天我和西蒙住在美国 今日美国 我很无聊

这可以做到吗?如何做到?

这个问题 (Regular expression, split string by capital letter but ignore TLA) 似乎可以通过 .net 完成。

工作解决方案

这是我使用的完整代码:

$string = 'TodayILiveInTheUSAWithSimon';
$regex = '/(?<!^)((?<![[:upper:]])[[:upper:]]|[[:upper:]](?![[:upper:]]))/';
$string = preg_replace( $regex, ' $1', $string );

这两个正则表达式的工作:

/(?<!^)((?<![[:upper:]])[[:upper:]]|[[:upper:]](?![[:upper:]]))/
/((?<=[a-z])(?=[A-Z])|(?=[A-Z][a-z]))/

第一个来自@Regexident 下面的解决方案,比第二个快得多。

【问题讨论】:

    标签: php regex string


    【解决方案1】:

    查找:

    (?<!^)((?<![[:upper:]])[[:upper:]]|[[:upper:]](?![[:upper:]]))
    

    替换:

     $1
    

    注意$1前面的空格

    编辑:修复。

    【讨论】:

    • 我应该使用什么 PHP 方法来完成这个正则表达式?
    • @T.BrianJones:那就是preg_replace
    • 我收到以下错误:preg_replace(): Compilation failed: POSIX named classes are supported only within a class at offset 4 当我执行此操作时:echo preg_replace( '((?&lt;![:upper:]|^)[:upper:]|(?&lt;!^)[:upper:](?![:upper:]))', ' $1', $string );
    • 请看固定答案。我忘记了 PHP 需要在 :upper: 周围加上双括号,我的错。与我的正则表达式不同,我的 PHP 有点尘土飞扬。 :P
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 2021-08-13
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 2018-12-13
    相关资源
    最近更新 更多