PHP - 在大写字母前添加下划线

2022-08-30 17:31:34

如何替换一组如下所示的单词:

SomeText

Some_Text

?


答案 1

这可以使用正则表达式轻松实现:

$result = preg_replace('/\B([A-Z])/', '_$1', $subject);

正则表达式的简要说明:

  • \B 断言单词边界处的位置。
  • [A-Z] 匹配 A-Z 中的任何大写字符。
  • () 将匹配项包装在后面的参考编号 1 中。

然后我们用'_$1'替换,这意味着用[下划线+反向引用1]替换匹配项。


答案 2
$s1 = "ThisIsATest";
$s2 = preg_replace("/(?<=[a-zA-Z])(?=[A-Z])/", "_", $s1);

echo $s2;  //  "This_Is_A_Test"

解释:

正则表达式使用两个环顾断言(一个向后看,一个向前看)来查找字符串中应插入下划线的位置。

(?<=[a-zA-Z])   # a position that is preceded by an ASCII letter
(?=[A-Z])       # a position that is followed by an uppercase ASCII letter

第一个断言确保在字符串的开头不插入下划线。


推荐