|
|
|
| Как выделить подстроку из стороки начинающиеся на заглавную букву русского алфавита . | |
|
|
|
|
|
|
|
для: dima2207
(06.01.2008 в 00:16)
| | Если нужно найти слова, начинающиеся с заглавной буквы, то так:
/\b([АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ].*?)\b/
|
Если требовалось не это, то четче формулируйте задачу. Если не можете, то давайте пример входных и выходных данных. | |
|
|
|
|
|
|
|
для: SHAman
(06.01.2008 в 02:46)
| | Прошу прощения , я немного неправельно сформулировал задачу !
есть строка : ДрамаКомедияМузыкальный
нужно отделить все слова начинающиешиеся на заглавную букву .
$per[0]=Драма
$per[1]=Комедия
$per[3]=Музыкальный | |
|
|
|
|
|
|
|
для: dima2207
(06.01.2008 в 03:26)
| | Тогда немного сложнее...
$big_russian = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ";
/([$big_russian][^$big_russian]*?)/
|
| |
|
|
|
|
|
|
|
для: dima2207
(06.01.2008 в 03:26)
| |
<pre>
<?php
$t="ДрамаКомедияМузыкальный";
preg_match_all("#[А-Я]{1}[^А-Я]+#",$t,$out);
print_r($out);
?>
|
| |
|
|
|
|
|
|
|
для: Faraon
(06.01.2008 в 19:05)
| | 1) зачем {1} после [А-Я]? Достаточно просто [А-Я][^А-Я]*
2) В классах символов с русскими диапазонами рекомендуется эти диапазоны прописывать полностью. Чтобы избежать проблем с разными кодировками, да и вообще. Надежней.
3) Я настаиваю на звездочке в конце класса-отрицания. А вдруг это слово из одной буквы? | |
|
|
|
|
|
|
|
для: SHAman
(06.01.2008 в 21:19)
| | >1) зачем {1} после [А-Я]? Достаточно просто [А-Я][^А-Я]*
>2) В классах символов с русскими диапазонами рекомендуется эти диапазоны прописывать полностью. Чтобы избежать проблем с разными кодировками, да и вообще. Надежней.
>3) Я настаиваю на звездочке в конце класса-отрицания. А вдруг это слово из одной буквы?
1. Да в принципе не обязательно
2. Если кодировка предопределена то и короткий вариант нормально и не обязательно все буквы перебирать
3. Слово из одной буквы это предлог? По замыслу автора не думаю что в этой переменной есть предлоги, так как это строка судя повсему к предложению не имеет отношения.
А если уж так, то просто * без ?
Звездочка и так обозначает или ноль или более | |
|
|
|
|
|
|
|
для: Faraon
(07.01.2008 в 16:59)
| | 1. Конценсус достигнут :)
2. У меня глючило как-то подобное перечисление. Теперь не ленюсь перечислить ручками.
3. Если есть слова из одной буквы, то *, если нет, то +. Вопросика, действительно, не надо. | |
|
|
|
|
|
|
|
для: SHAman
(07.01.2008 в 18:31)
| | >> Вопросика, действительно, не надо.
Только его не надо не потому что "звездочка и так обозначает или ноль или более", а потому что это рег. выражение будет работать и в жадном режиме. (UPD ЫЫ.. вернее, оно будет работать только в жадном режиме).
А насчет втрого, честно говоря, не очень верится.... Никогда не сталкивался, хз.
Однако
<? if (preg_match("/^[?-~]+$/", "{|}"))
echo "yes";
|
Выведет "yes". То есть из-за кириллицы оно не работать вроде как не может. И если перичислять все букавы руками, то перечислять надо и латиницу, и цифры... Что, по-моему, глупо.
Ну может какая хитрая кодировка есть? не знаю... | |
|
|
|
|
|
|
|
для: kasmanaft
(07.01.2008 в 19:29)
| | Если нет модификатора "u" явно указывающего на то, что идет работа с UTF-8, то задаются диапазоны не символов, а байтов. Фактически для cp1251 задается промежуток 0xC0 - 0xDF (А - Я)
А если взять, например, KOI8-R, то там буквы расположены вообще в совершенно ином порядке: http://ru.wikipedia.org/wiki/KOI8-R
Тогда и правда придется прописывать все буквы.
> Однако
> <? if (preg_match("/^[?-~]+$/", "{|}"))
> echo "yes";
> Выведет "yes".
А что тут удивительного? Вы выбрали диапазон байтов, который будет соответствовать одной и той же последовательности символов в подавляющем большинстве кодировок. Лично я припоминаю только две кодировки в которых символы типа "?" выражаются по-другому. Это UCS-2 и UCS-4. Да и то там просто предваряется несколькими 0x00. | |
|
|
|
|
|
|
|
для: Unkind
(07.01.2008 в 21:05)
| | Да, спецсимволы, цифры и латиница почти везде одинаковые места занимают. С кириллицей не все так гладко. Короче, дело вкуса. | |
|
|
|
|
|
|
|
для: Unkind
(07.01.2008 в 21:05)
| | >> А что тут удивительного? Вы выбрали диапазон байтов, который будет соответствовать одной и той же последовательности символов в подавляющем большинстве кодировок.
Вопщем-то я и не удивлялся. Этим кодом я хотел показать, что "выбирается диапазон байтов" (не важно буквы это, цифры или что-то другое). А буквы, думаю, в большинстве кодировок тоже идут по порядку. А KOI8-R - это какое-то недоразумение :)
>> Faraon. В даном случае оно с ? и будет работать в жадном режиме.
По умолчанию рег. выражения работают в жадном режиме. "?" или модификатор "U" эту жадность инвертируют. В данном случае модификатора "U" нет, соответственно "с ?" будет работать в нежадном режиме. (отсюда и "в итоге получатся первые заглавные буквы" - потому что выражение нежадное)
PS о KOI8-R не знал... Вот и "хитрая кодировка". | |
|
|
|
|
|
|
|
для: kasmanaft
(08.01.2008 в 13:13)
| | >По умолчанию рег. выражения работают в жадном режиме. "?" или модификатор "U" эту жадность инвертируют. В данном случае модификатора "U" нет, соответственно "с ?" будет работать в нежадном режиме. (отсюда и "в итоге получатся первые заглавные буквы" - потому что выражение нежадное)
to Kasmanaft
Я это прекрасно понимаю, и мне это объяснять не зачем :) | |
|
|
|
|
|
|
|
для: Faraon
(08.01.2008 в 18:54)
| | Ну, может быть, неправильно понял... Мне так показалось, что Вы написали обратное. | |
|
|
|
|
|
|
|
для: kasmanaft
(07.01.2008 в 19:29)
| | >Только его не надо не потому что "звездочка и так обозначает или ноль или более", а потому что это рег. выражение будет работать и в жадном режиме. (UPD ЫЫ.. вернее, оно будет работать только в жадном режиме).
>Ну может какая хитрая кодировка есть? не знаю...
В даном случае оно с ? и будет работать в жадном режиме.
В итоге и получатся первые заглавные буквы | |
|
|
|