sim*_*Pod 10 php regex camelcasing
我正在使用此函数将CamelCase转换为虚线字符串:
function camel2dashed($className) {
return strtolower(preg_replace('/([^A-Z-])([A-Z])/', '$1-$2', $className));
}
Run Code Online (Sandbox Code Playgroud)
它有点工作但是当我有前任时有问题.这个字符串:getADog
.它返回get-adog
但我想要get-a-dog
我该如何更改我的代码?谢谢
Mar*_*ers 31
使用先行断言:
function camel2dashed($className) {
return strtolower(preg_replace('/([a-zA-Z])(?=[A-Z])/', '$1-', $className));
}
Run Code Online (Sandbox Code Playgroud)
看到它在线工作:ideone
如果您知道字符串不是以大写字母开头,则不需要前瞻断言来执行此操作,您可以在每个大写字母之前插入连字符,如下所示:
function camel2dashed($className) {
return strtolower(preg_replace('/([A-Z])/', '-$1', $className));
}
Run Code Online (Sandbox Code Playgroud)
这仍然不会处理像@ sfjedi的"companyHQ" - >"company-hq"这样的情况.为此,您必须显式测试不应拆分的允许的大写子串,或指定一些通用规则(例如,不要在最后一个字符之前添加连字符).
您可以在此虚拟重复问题的答案中找到一些更复杂的替代方案.