我設法實現駱駝情況下轉換成詞的功能,通過使用這個問題由@ridgerunner建議的解決方案:結合正則表達式分裂駝峯串入的話
Split camelCase word into words with php preg_match (Regular Expression)
不過,我想同時還處理嵌入abreviations這樣的:
「hasABREVIATIONEmbedded」轉化爲「有縮寫符號嵌入式」
我想出了這個解決方案:
<?php
function camelCaseToWords($camelCaseStr)
{
// Convert: "TestASAPTestMore" to "TestASAP TestMore"
$abreviationsPattern = '/' . // Match position between UPPERCASE "words"
'(?<=[A-Z])' . // Position is after group of uppercase,
'(?=[A-Z][a-z])' . // and before group of lowercase letters, except the last upper case letter in the group.
'/x';
$arr = preg_split($abreviationsPattern, $camelCaseStr);
$str = implode(' ', $arr);
// Convert "TestASAP TestMore" to "Test ASAP Test More"
$camelCasePattern = '/' . // Match position between camelCase "words".
'(?<=[a-z])' . // Position is after a lowercase,
'(?=[A-Z])' . // and before an uppercase letter.
'/x';
$arr = preg_split($camelCasePattern, $str);
$str = implode(' ', $arr);
$str = ucfirst(trim($str));
return $str;
}
$inputs = array(
'oneTwoThreeFour',
'StartsWithCap',
'hasConsecutiveCAPS',
'ALLCAPS',
'ALL_CAPS_AND_UNDERSCORES',
'hasABREVIATIONEmbedded',
);
echo "INPUT";
foreach($inputs as $val) {
echo "'" . $val . "' translates to '" . camelCaseToWords($val). "'\n";
}
輸出是:
INPUT'oneTwoThreeFour' translates to 'One Two Three Four'
'StartsWithCap' translates to 'Starts With Cap'
'hasConsecutiveCAPS' translates to 'Has Consecutive CAPS'
'ALLCAPS' translates to 'ALLCAPS'
'ALL_CAPS_AND_UNDERSCORES' translates to 'ALL_CAPS_AND_UNDERSCORES'
'hasABREVIATIONEmbedded' translates to 'Has ABREVIATION Embedded'
它按預期工作。
我的問題是: 我可以結合2個正則表達式$ abreviationsPattern和camelCasePattern 這樣我就可以避開運行使preg_split()函數兩次?
爲什麼當你通過連接並使用PHP註釋而不是正則表達式來避免所有空白時使用'x'修飾符? 'x'的缺點是你可以用'#...'註釋將你的表達式作爲一個多行字符串傳入。 –
我沒有意識到\ x的含義。我從源代碼中複製了模式,並從那裏擴展。感謝您的信息。 – stou