2011-06-06 93 views
13

是否可以將駱駝大小寫字符串解析爲更具可讀性的內容。如何解析駱駝案例人類可讀的字符串?

例如:

  • LocalBusiness =本地商戶
  • CivicStructureBuilding =文娛結構建築
  • getUserMobilePhoneNumber =獲取用戶手機號碼
  • bandGuitar1 =樂隊吉他1

UPDATE

使用正則表達式simshaun例如我設法從文本與本規則分開編號:

function parseCamelCase($str) 
{ 
    return preg_replace('/(?!^)[A-Z]{2,}(?=[A-Z][a-z])|[A-Z][a-z]|[0-9]{1,}/', ' $0', $str); 
} 

//string(65) "customer ID With Some Other JET Words With Number 23rd Text After" 
echo parseCamelCase('customerIDWithSomeOtherJETWordsWithNumber23rdTextAfter'); 

回答

32

有在str_split的PHP手冊,用戶評論的一些例子。

Kevin

<?php 
$test = 'CustomerIDWithSomeOtherJETWords'; 

preg_replace('/(?!^)[A-Z]{2,}(?=[A-Z][a-z])|[A-Z][a-z]/', ' $0', $test); 


而且這裏的東西我寫來滿足您的職位的要求:

<?php 
$tests = array(
    'LocalBusiness' => 'Local Business', 
    'CivicStructureBuilding' => 'Civic Structure Building', 
    'getUserMobilePhoneNumber' => 'Get User Mobile Phone Number', 
    'bandGuitar1' => 'Band Guitar 1', 
    'band2Guitar123' => 'Band 2 Guitar 123', 
); 

foreach ($tests AS $input => $expected) { 
    $output = preg_replace(array('/(?<=[^A-Z])([A-Z])/', '/(?<=[^0-9])([0-9])/'), ' $0', $input); 
    $output = ucwords($output); 
    echo $output .' : '. ($output == $expected ? 'PASSED' : 'FAILED') .'<br>'; 
} 
+0

感謝,但它是可以分離的數字? – Nazariy 2011-06-06 15:17:23

+0

當然可以。編輯。 – simshaun 2011-06-06 15:34:18

+0

@dynamic ...有什麼建議嗎? – greaterKing 2015-01-04 05:08:15

0

使用正則表達式表達。在java中這樣的事情

String[] r = s.split("(?=\\p{Lu})"); 

獲取你最的方式而不是getUserMobilePhoneNumber =獲取用戶手機號碼

+0

會在結果中使用'ucwords()'讓你穿越終點線? – preinheimer 2011-06-06 15:19:03

+1

爲什麼這個答案是downvoted? 授予它不是一個完整的解決方案,但它是一個更聰明的方法的例子,也將支持其他字母。 ('p {Ll})(\ p {Lu})〜u','$ {1} $ {2}','someCamelCaseText'),MB_CASE_TITLE,「UTF-8」) ;' 適用於拉丁文,西里爾文,希臘文或任何其他字母表,它具有字母大小寫的概念,與CamelCase方法兼容。 – Docal 2017-01-19 12:06:10

相關問題