2013-06-27 2 views
0

У меня возникла проблема, когда я пытаюсь загладить первую букву после символа или символа и на самом деле отлично работает, но если моя строка содержит пробелы между словами, код игнорирует верхний регистр и печатает как , например:В верхнем регистре после символа или символа с PHP

$string = "•TEXT"; 

$string = ucfirst(strtolower($string)); 

$string = preg_replace_callback('/[.!?].*?\w/', create_function('$matches', 'return strtoupper($matches[0]);'),$string); 

$string = preg_replace('/^•([a-z])([a-z]+)$/e', '"•" . strtoupper("\\1") . "\2"', $string); 

echo $string; //This print •Text 

В приведенном выше примере показан текст правильно, но в нем нет пробелов. Если у вас есть пробел, как следующий код, он отображает весь текст в нижнем регистре, например:

$string = "•TEXT EXAMPLE"; 

$string = ucfirst(strtolower($string)); 

$string = preg_replace_callback('/[.!?].*?\w/', create_function('$matches', 'return strtoupper($matches[0]);'),$string); 

$string = preg_replace('/^•([a-z])([a-z]+)$/e', '"•" . strtoupper("\\1") . "\2"', $string); 

echo $string; //This print •text example (This is my problem, all is lowercased) 

Помогите мне с этим?

ответ

0

Как насчет более простое решение:

$str = '•TEXT EXAMPLE'; 
if (preg_match('/(^&[^;]+;)(.*)/', $str, $matches)) { 
    list($discard, $entity, $text) = $matches; 
    // list(, $entity, $text) = $matches; // this works too 
    $string = $entity . trim(ucfirst(strtolower($text))); 
    echo $string; 
} else { 
    # Match attempt failed 
} 
+0

прекрасно работает, но когда я пытаюсь использовать его с моим сценарием он перестанет работать, я уверен, что я делаю что-то неправильно, но я не знаю, где проблема , Я беру текст из XML-фида @ Twisted1919 '$ str = eregi_replace (". * "," ", $ part [$ i]); if (preg_match ('/ (^ &[^;] +;) (. *) /', $ Str, $ matches)) { list ($ discard, $ entity, $ text) = $ matches; // list (, $ entity, $ text) = $ matches; // это тоже работает $ string = $ entity. подрезать (ucfirst (strtolower ($ текста))); echo $ string; } else { # Ошибка совпадения } ' –

+0

После вашего' eregi_replace() 'ваша' $ str' все еще содержит что-то? Вы должны использовать 'preg_ *' вместо 'ereg_ *'. Кроме того, вы должны ввести тип '$ str' в строку:' $ str = (string) preg_replace ('/ [^ <] * /ix', '', $ part [$ i]); '(регулярное выражение не проверяется) – Twisted1919