在PHP中拆分带有未触摸单元的驼峰案例字符串

时间:2014-07-17 13:08:50

标签: php regex

我正在寻找格式为

的字符串
SystolicArterialPressure(mmHg)

Systolic Arterial Pressure (mmHg)

基本上是分裂在camelcase和括号开口处,但不是在括号内的任何内容上。我对正则表达式表达很糟糕,希望对此有所帮助。

谢谢!

4 个答案:

答案 0 :(得分:2)

试试这个

$string = "SystolicArterialPressure(mmHg)";

$newString = preg_replace("/([A-Z].[^A-Z(]+)/s", "$1 ", $string);

答案 1 :(得分:1)

您可以尝试使用以下正则表达式在任何大写字母字母表之前添加空格,该大写字母不在()内或在起点之后。

(?:(?<=\()[^)]*|^[A-Z])(*SKIP)(*F)|([A-Z]|\()

替换模式,

 \1

DEMO

PHP代码将是,

<?php
$string = 'SystolicArterialPressure(mmHg)';
$pattern = "~(?:(?<=\()[^)]*|^[A-Z])(*SKIP)(*F)|([A-Z]|\()~";
$replacement = " $1";
echo preg_replace($pattern, $replacement, $string);
?>

输出:

Systolic Arterial Pressure (mmHg)

答案 2 :(得分:0)

好吧,您可以使用preg_replace插入匹配的空格:

  • 任何连续的单词字符串,开头是[[:uppper:]]个字母,后面是[[:lower:]]+个字母。

  • 或只是parens \(.*?\)中的任何内容。一旦消耗,正则表达式无论如何都不会再次查看。

答案 3 :(得分:0)

我试试用PHP :)并用大锤破解坚果

$string = 'SystolicArterialPressure(mmHg)';

$newString = implode('', array_map(function($word, $break){
    if( strstr($word,'(') ) $break = true;
    if( $break ) return $word;
    return $word . ' ';
}, preg_split('#(?=[A-Z(])#s',$string), array(false)));

echo $newString;