正则表达式和拆分驼峰命名法

4

我希望获取包含在字符串中的所有大写字母的单词数组。但是仅当该行以“set”开头时。

例如:

- string "setUserId", result array("User", "Id")
- string "getUserId", result false

没有关于“set”的限制,正则表达式长这样 /([A-Z][a-z]+)/


1
我认为你不能使用匹配来完成它,因为PCRE不支持lookbehinds中的可变重复。相反,请使用@codaddict的解决方案。 - FailedDev
1个回答

4
$str ='setUserId';                          
$rep_str = preg_replace('/^set/','',$str);
if($str != $rep_str) {
        $array = preg_split('/(?<=[a-z])(?=[A-Z])/',$rep_str);
        var_dump($array);
}

查看

你的正则表达式也可以工作:

$str = 'setUserId';
if(preg_match('/^set/',$str) && preg_match_all('/([A-Z][a-z]*)/',$str,$match)) {
        var_dump($match[1]);                                                    
}

See it


非常好 + 1!这是否可能在不使用 replace/split 的情况下,即使用 match 实现? - FailedDev
一个双重正则表达式。不错。谢谢!不过我不能给+2分,哈哈。 - FailedDev
我希望这个操作可以通过一个正则表达式完成。 - Tui Kiken
在这个例子中,我的版本是:$name = 'setUserId'; preg_match_all('/(?:^|[A-Z])[a-z]+/', $name, $matches); $data = $matches[0]; $prefix = array_shift($data); if ($prefix == 'set') { // 使用包含数组('User', 'Id')的 $data 变量进行操作 } - Tui Kiken

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接