[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Регулярное выражение все кроме...
ferol
Как записать регуляное выражение "все кроме набора символов а,б,в" ?
Или более кокретно. Столкнулся с задачей. В строке убрать символы кроме определенных. Решил сделать так: заменить с помощью ereg_replace() "все кроме набора символов а,б,в" на пустую строку. Но не нашел, как записать выражение "все кроме набора символов а,б,в".



Спустя 36 минут, 30 секунд (15.01.2009 - 16:23) kirik написал(а):
ferol,
PHP
$str 'abcdefghijklkmop';
echo 
preg_replace('/[^abc]/i'null$str);


Спустя 1 час, 31 минута, 27 секунд (15.01.2009 - 17:55) ferol написал(а):
То есть не в регулярном выражении выглядит ^? Спасибо! То что нужно!
preg_replace вместо ereg_replace критично?

Спустя 42 минуты, 50 секунд (15.01.2009 - 18:38) Adamant написал(а):
IMHO мне больше нравятся "Perl-регулярки"(preg_replace и т.д.) чем POSIX(ereg_replace ...). Они обычно более глазу приятнее и понятнее. Да и обычно меньше писанины, поэтому я POSIX-регулярки вообще не юзаю.

Д.Котеров, А.Костарев "PHP5" 452-454 стр.
"Нужно учитывать, что формат POSIX на практике медленно, но верно устаревает, а язык PCRE обходит его практически по всем параметрам (и по количеству возможностей и по скорости на большинстве выражений).
...
...
в большинстве типовых случаев выражения PCRE показывают значительно лучшие показатели, чем POSIX."

PS. Скузми за опечатку, думаю все мысль поняли правильно.
user posted image

Спустя 39 минут, 2 секунды (15.01.2009 - 19:17) Sylex написал(а):
Цитата (Adamant @ 15.01.2009 - 21:38)
выражения PCRE показывают значительно лучшие показатели, чем PCRE

user posted image

Спустя 1 час, 12 минут, 28 секунд (15.01.2009 - 20:29) Alchemist написал(а):
user posted image

Спустя 56 минут, 39 секунд (15.01.2009 - 21:26) kirik написал(а):
=))))

ferol, Adamant, перловые (preg) регулярки еще и быстрее обрабатываются при большом объеме текста.

Спустя 19 часов, 2 минуты, 41 секунда (16.01.2009 - 16:29) ferol написал(а):
Цитата (kirik @ 15.01.2009 - 18:26)
=))))

ferol, Adamant, перловые (preg) регулярки еще и быстрее обрабатываются при большом объеме текста.

Спасибо, это как раз то что надо. Но в моем справочнике написано:
^ начало утверждения субъекта (или строки, в многострочном режиме)
Но код работает так, как мне надо. Может у меня справочник неправильный?
И еще пара вопросов, есть функция наподобие рreg_replace, которая заменяет не все куски в тексте, а только первый? Есть функция, которая в тексте находит кусок, подходящий к регулярному выражению, и выдает его значение.
Тоесть foo('/^[abc]/',$str) выдал бы первый символ, не совпадающий с a,b и с.

Спустя 2 часа, 14 минут, 12 секунд (16.01.2009 - 18:43) dfsq написал(а):
к тому же поддержка posix уже исключена из ядра php 6

Спустя 33 минуты, 42 секунды (16.01.2009 - 19:17) Adamant написал(а):
Если "крышка" (^) ставится внутри квадратных скобок - [], это означает, что не должно быть набора символов указанных внутри []. Например: '/[^abc]/' - искать любой символ кроме букв a b и с
Если "крышка" ^ ставится сначала паттерна, это соответствует началу строки. Пример: '/^[^abc]/' - искать любой символ с самого начала строки кроме букв a b и с
PHP
<?php
$text 
'qwerty qwerty qwerty qwerty qwerty';
// заменяет не все куски в тексте, а только первый
echo preg_replace('|\w+|''12345'$text1); // 12345 qwerty qwerty qwerty qwerty

// выдает первый символ с самого начала строки, не совпадающий с a,b и с.
preg_match('/^[^abc]{1}/'$text$arr);
echo 
"<br />";
echo 
$arr[0];

Спустя 17 часов, 28 минут, 24 секунды (17.01.2009 - 12:45) ferol написал(а):
Цитата (Adamant @ 16.01.2009 - 16:17)
PHP
<?php
// выдает первый символ с самого начала строки, не совпадающий с a,b и с.
preg_match('/^[^abc]{1}/', $text, $arr);
echo "<br />";
echo $arr[0];



Опечатка. То что мне нужно, записывается так.
PHP
<?php
// выдает первый символ с самого начала строки, не совпадающий с a,b и с.
preg_match('/[^abc]{1}/', $text, $arr);
echo "<br />";
echo $arr[0];

Спустя 3 часа, 20 минут, 1 секунда (17.01.2009 - 16:05) Adamant написал(а):
Цитата (ferol @ 17.01.2009 - 16:45)
Цитата (Adamant @ 16.01.2009 - 16:17)
PHP
<?php
// выдает первый символ с самого начала строки, не совпадающий с a,b и с.
preg_match('/^[^abc]{1}/', $text, $arr);
echo "<br />";
echo $arr[0];



Опечатка. То что мне нужно, записывается так.
PHP
<?php
// выдает первый символ с самого начала строки, не совпадающий с a,b и с.
preg_match('/[^abc]{1}/', $text, $arr);
echo "<br />";
echo $arr[0];

Опечатки нет. Если вас смущает то что "крышка" ^ стоит в самом начале паттерна в данном случае в принципе роли не играет, но я ее специально поставил туда чтобы проиллюстрировать ваш вопрос о:
" Но в моем справочнике написано:
^ начало утверждения субъекта (или строки, в многострочном режиме)
Но код работает так, как мне надо. Может у меня справочник неправильный?"

Так что это не должно вас смущать. Принципиальной разницы между
preg_match('/^[^abc]{1}/', $text, $arr);
и
preg_match('/[^abc]{1}/', $text, $arr);
Я не вижу.

Спустя 4 часа, 20 минут, 45 секунд (17.01.2009 - 20:26) Sylex написал(а):
Adamant
во 2-ом случае строка 'ax' попадет в шаблон, тогда как в 1-ом - нет, т.к. она начинается с a, что не допустимо
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.