За последние 24 часа нас посетили 17755 программистов и 1661 робот. Сейчас ищут 1177 программистов ...

Преобразование прочерков + слово

Тема в разделе "Регулярные выражения", создана пользователем bernex, 15 дек 2009.

  1. bernex

    bernex Активный пользователь

    С нами с:
    19 сен 2008
    Сообщения:
    3
    Симпатии:
    0
    из
    Код (Text):
    1. Name_family_two в NameFamilyTwo
    и

    из
    Код (Text):
    1. NameFamilyTwo в Name_family_two
    как можно преобразовать, стало интересно мне?

    Спасибо!
    Насколько нагруженнным будет такой преобразование?
     
  2. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Zend_Filter_Word_SeparatorToCamelCase
    PHP:
    1. <?php
    2.     public function filter($value)
    3.         if (self::isUnicodeSupportEnabled()) {
    4.             parent::setMatchPattern(array('#('.$pregQuotedSeparator.')(\p{L}{1})#e','#(^\p{Ll}{1})#e'));
    5.             parent::setReplacement(array("strtoupper('\\2')","strtoupper('\\1')"));
    6.         } else {
    7.             parent::setMatchPattern(array('#('.$pregQuotedSeparator.')([A-Za-z]{1})#e','#(^[A-Za-z]{1})#e'));
    8.             parent::setReplacement(array("strtoupper('\\2')","strtoupper('\\1')"));
    9.         }
    10.         return parent::filter($value);
    11.  
    Собственно parent
    Zend_Filter_PregReplace
    PHP:
    1. <?php
    2.     public function filter($value)
    3.     {
    4.         if ($this->_matchPattern == null) {
    5.             require_once 'Zend/Filter/Exception.php';
    6.             throw new Zend_Filter_Exception(get_class($this) . ' does not have a valid MatchPattern set.');
    7.         }
    8.  
    9.         return preg_replace($this->_matchPattern, $this->_replacement, $value);
    10.     }
     
  3. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    Simpliest
    славное говно

    делается это в одну строчку
    PHP:
    1.  
    2. <?
    3. print_r(preg_split("#(?=[A-Z])#","NameFamilyTwo"));
    4. ?>
    5.  
    дальше - понятно
     
  4. obsrv

    obsrv Активный пользователь

    С нами с:
    2 окт 2008
    Сообщения:
    238
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    PHP:
    1.  
    2. $str = "Name_family_two";
    3. echo preg_replace('/(\w+)_(\w+)_(\w+)/e', '\'\1\' . ucfirst(\'\2\') . ucfirst(\'\3\')', $str);
    4. $str = "NameFamilyTwo";
    5. echo preg_replace('/([[:upper:]][[:lower:]]+)([[:upper:]][[:lower:]]+)([[:upper:]][[:lower:]]+)/e', '\'\1_\' . lcfirst(\'\2\') . \'_\' . lcfirst(\'\3\')', $str );
    6.