$x="b|i|u|a|"
В общем я проверяю переменную на пустоту, НО
if (!preg_match("/(\S+)/i", $message)) - это означает вообще любой символ, но нам еще надо исключить случаи, когда нет ни одного символа, но есть "пустота [$x] пустота [\$x] пустота", надо чтобы и они возвращали false, как составить общее регулярное выражение?
Спустя 4 минуты, 10 секунд (17.06.2010 - 12:19) tomash написал(а):
\S все видимые символы насколько я помню
Спустя 3 минуты, 13 секунд (17.06.2010 - 12:22) Hugo_O написал(а):
tomash
ну да, это понятно(мне пробел тоже не нужен), но вопрос не в этом!
ну да, это понятно(мне пробел тоже не нужен), но вопрос не в этом!
Спустя 4 минуты, 19 секунд (17.06.2010 - 12:26) tomash написал(а):
"не" - ^ перед символьным класом например ([^\d]+) - не цифра
Спустя 20 минут, 49 секунд (17.06.2010 - 12:47) Hugo_O написал(а):
tomash
основы-то я знаю, но не получается составить то что нужно!
основы-то я знаю, но не получается составить то что нужно!
Спустя 6 минут, 18 секунд (17.06.2010 - 12:53) tomash написал(а):
А можно пример??? А то я что-то торможу... не могу въехать
если так? "/(\S+)|(\s+)/i"
или так? "/([\S|\s]+)/i"
если так? "/(\S+)|(\s+)/i"
или так? "/([\S|\s]+)/i"
Спустя 39 секунд (17.06.2010 - 12:54) Ice написал(а):
что за пустота, никак не могу понять?
tomash, если Вы не собираетесь запоминать сгруппированные значения, советую использовать несохраняющую группировку -
(?:\S|\s)+
tomash, если Вы не собираетесь запоминать сгруппированные значения, советую использовать несохраняющую группировку -
(?:\S|\s)+
Спустя 6 минут, 24 секунды (17.06.2010 - 13:01) tomash написал(а):
Ice
Знаю знаю... но спасибо
Знаю знаю... но спасибо
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
Спустя 8 минут, 13 секунд (17.06.2010 - 13:09) Hugo_O написал(а):
Ice
tomash
ладно объясню более человечески))
если человек не напишет ни одного символа- то это понятно как контролировать
например, "/(\S+)/i" - этого вроде как достаточно, а если он в поле ввода вставит бб-код, например [bb] [/bb] и ВСЕ - здесь же присутствуют символы, но нам нужно понять, что это сообщение все равно НА САМОМ-ТО ДЕЛЕ пустое, вот о чем я!!!!
tomash
ладно объясню более человечески))
если человек не напишет ни одного символа- то это понятно как контролировать
например, "/(\S+)/i" - этого вроде как достаточно, а если он в поле ввода вставит бб-код, например [bb] [/bb] и ВСЕ - здесь же присутствуют символы, но нам нужно понять, что это сообщение все равно НА САМОМ-ТО ДЕЛЕ пустое, вот о чем я!!!!
Спустя 11 минут, 55 секунд (17.06.2010 - 13:21) Winston написал(а):
Так ?
$message = trim($message);
if (preg_match("/\[(i|b|u|s)\] ?\[\/(i|b|u|s)\]/i", $message))
echo 'Заполните поле !';
else
......
Спустя 4 минуты, 42 секунды (17.06.2010 - 13:25) tomash написал(а):
Ясно))))
((\[\S+\]\S+\[\S+\])|([^\[]\S+))
((\[\S+\]\S+\[\S+\])|([^\[]\S+))
Спустя 3 минуты, 28 секунд (17.06.2010 - 13:29) Ice написал(а):
Цитата (Hugo_O @ 17.06.2010 - 14:09) |
Ice tomash ладно объясню более человечески)) если человек не напишет ни одного символа- то это понятно как контролировать например, "/(\S+)/i" - этого вроде как достаточно, а если он в поле ввода вставит бб-код, например [bb] [/bb] и ВСЕ - здесь же присутствуют символы, но нам нужно понять, что это сообщение все равно НА САМОМ-ТО ДЕЛЕ пустое, вот о чем я!!!! |
проверку пустой строки лучше осуществить функцией empty().
А вот проверку наличия какого-то слова внутри тегов, наверное так:
(?<=[bb])\w+(?=[/bb])
Спустя 16 минут, 46 секунд (17.06.2010 - 13:46) Hugo_O написал(а):
tomash
Ice
не работает, пытаюсь найти ошибку, но это ппц, надоели эти рег. выражения уже...
Ice
не работает, пытаюсь найти ошибку, но это ппц, надоели эти рег. выражения уже...
Спустя 12 минут, 26 секунд (17.06.2010 - 13:58) tomash написал(а):
сначала прверку на пустоту, а потом на бб-код "/(\[\S+\]\S+\[\S+\])/"
Спустя 5 минут, 1 секунда (17.06.2010 - 14:03) Hugo_O написал(а):
tomash
спасибо за помощь!!!
только вместо проверки, я сделал замену пустых тэгов на ''.
спасибо за помощь!!!
только вместо проверки, я сделал замену пустых тэгов на ''.
Спустя 7 минут, 3 секунды (17.06.2010 - 14:10) tomash написал(а):
Hugo_O
а я воюю с обратным слэшом
![biggrin.gif](http://phpforum.ru/html/emoticons/biggrin.gif)
![blink.gif](http://phpforum.ru/html/emoticons/blink.gif)
Спустя 4 минуты, 11 секунд (17.06.2010 - 14:14) Ice написал(а):
всё, господа, прекрасно работает
![wink.gif](http://phpforum.ru/html/emoticons/wink.gif)
$string = "<dd>Hello, world!</dd>";
print preg_match('/(?<=<dd>)[^<>]+(?=<\/dd>)/i', $string ); // выведет 1
Спустя 2 часа, 43 минуты, 45 секунд (17.06.2010 - 16:58) FatCat написал(а):
Мы ушли от темы "не" в регулярках.
Часто с этим сталкиваюсь, тоже не могу найти решения.
Простой пример:
Мне нужен массив внешних линков.
Просто массив линков получаю регуляркой:
Но туда валятся и внутренние линки.
Как сделать, чтобы в массив НЕ попадали линки, содержащие подстроку site.ru?
Часто с этим сталкиваюсь, тоже не могу найти решения.
Простой пример:
Мне нужен массив внешних линков.
Просто массив линков получаю регуляркой:
preg_match_all('/<a href="http:\/\/(.*?)"/si', $page, $result);
Но туда валятся и внутренние линки.
Как сделать, чтобы в массив НЕ попадали линки, содержащие подстроку site.ru?
Спустя 14 минут, 41 секунда (17.06.2010 - 17:13) tomash написал(а):
[^s{1}i{1}t{1}e{1}\.{1}r{1}u{1}]$
Спустя 3 часа, 58 минут, 6 секунд (17.06.2010 - 21:11) FatCat написал(а):
tomash
Это для жесткой последовательности символов.
А если нужно все ссылки, кроме доменов, имеющих двойную букву?
Чтобы приняло mail.ru, yandex.ru и не приняло google.ru и saakh.com?
Это для жесткой последовательности символов.
А если нужно все ссылки, кроме доменов, имеющих двойную букву?
Чтобы приняло mail.ru, yandex.ru и не приняло google.ru и saakh.com?
Спустя 15 минут, 33 секунды (17.06.2010 - 21:26) tomash написал(а):
FatCat
В регулярных выражениях нет логического "И", было бы проще...
Кстати слышали о програмке Regex Coach
В регулярных выражениях нет логического "И", было бы проще...
Кстати слышали о програмке Regex Coach
Спустя 1 час, 36 минут, 16 секунд (17.06.2010 - 23:03) DedMorozzz написал(а):
Цитата |
А если нужно все ссылки, кроме доменов, имеющих двойную букву? |
разбить домен по буквам и сравнивать текущую со следующей.
Иль надобно именно регуляркой?
Иль надобно именно регуляркой?
Спустя 13 минут, 42 секунды (17.06.2010 - 23:16) tomash написал(а):
DedMorozzz
Вариантов всегда много, можно ли сделать это регуляркой?
Вариантов всегда много, можно ли сделать это регуляркой?
Спустя 14 минут, 59 секунд (17.06.2010 - 23:31) DedMorozzz написал(а):
Да можно. Но регулярка очень не качественная выйдет. Перечислять все буквы и указывать, что такая же буква дальше не может стоять. В принципе, шаблон для 1й буквы делается, а далее - копипаст с заменой алфавита, но, как уже сказал, регулярка не красивая выйдет, но зделать - можно
Спустя 4 минуты, 37 секунд (17.06.2010 - 23:36) tomash написал(а):
DedMorozzz
Вот и то, что не красивая.... а хочется поэлегантней!
Вот и то, что не красивая.... а хочется поэлегантней!
Спустя 17 минут, 2 секунды (17.06.2010 - 23:53) DedMorozzz написал(а):
Аж самому стало интересно, сделал заготовку. Идея думаю будет ясна:
В переменую $a можно задавать все буквы, которые есть в регулярке(a-g,e,f,x), остальные по такому же принципу дописать, просто по алфавиту. Если не будут 2 одинаковые буквы стоять рядом, то всё ок. Иначе - не будет совпадения, ошибка.
А если по элегантнее - то предварительно циклом прогнать 1 "звено" (буква(?!буква), ставя следующую букву и в дальнейшем просто переменную засунуть в регулярку. Но поскольку вопрос был именно регуляркой, то его и написал.
$a="yandex.com";
preg_match_all("#^((a(?!a))*(b(?!B))*(c(?!c))*(d(?!d))*(e(?!e))*(f(?!f))*(g(?!g))*(y(?!y))*(n(?!n))*(d(?!d))*(e(?!e))*(x(?!x))*)+\.com$#",$a,$matches);
print_r($matches);
В переменую $a можно задавать все буквы, которые есть в регулярке(a-g,e,f,x), остальные по такому же принципу дописать, просто по алфавиту. Если не будут 2 одинаковые буквы стоять рядом, то всё ок. Иначе - не будет совпадения, ошибка.
А если по элегантнее - то предварительно циклом прогнать 1 "звено" (буква(?!буква), ставя следующую букву и в дальнейшем просто переменную засунуть в регулярку. Но поскольку вопрос был именно регуляркой, то его и написал.
Спустя 10 часов, 23 минуты, 36 секунд (18.06.2010 - 10:17) DedMorozzz написал(а):
Выделил пару мин, доделал до норм вида ![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
$b='';
for($i=ord('a');$i<=ord('z');$i++){
$b .='('.chr($i).'(?!'.chr($i).'))?';
}
$a="yandex.com";
preg_match_all("#^($b)+\.[a-z]{2,6}(\.[a-z]{2,6})?$#",$a,$matches);
echo $matches[0][0];
Спустя 50 минут, 56 секунд (18.06.2010 - 11:07) tomash написал(а):
DedMorozzz
есть такое дело )))
есть такое дело )))
Спустя 4 минуты, 38 секунд (18.06.2010 - 11:12) DedMorozzz написал(а):
Конечно я понятия не имею, куда таковое можно применить, но всё же... (:
Спустя 3 минуты, 59 секунд (18.06.2010 - 11:16) tomash написал(а):
DedMorozzz
Задача теоретическая... Я вот думаю возможно ли использовать результат совпадения с подстрокой в этой же регулярке?????
Задача теоретическая... Я вот думаю возможно ли использовать результат совпадения с подстрокой в этой же регулярке?????
Спустя 8 минут, 15 секунд (18.06.2010 - 11:24) DedMorozzz написал(а):
Да можно. Строить выражение и смотреть совпадает ли такое же слева иль с права от нужного, пропуская промежуточные символы. Регулярками вообще можно всё сделать, хоть ДНК описать.
Спустя 11 минут, 37 секунд (18.06.2010 - 11:36) tomash написал(а):
DedMorozzz
Искал но не нашел, если мы сохраняем результат вхождения подстроки "()", то как ее засунуть опять в регулярку в эту же???
Искал но не нашел, если мы сохраняем результат вхождения подстроки "()", то как ее засунуть опять в регулярку в эту же???
Спустя 3 минуты, 20 секунд (18.06.2010 - 11:39) DedMorozzz написал(а):
=) Да и не надо "такого" искать, это нереально по-индусски выйдет, хотя можно.
В таких случаях намного лучше делать в пару этапов.
В таких случаях намного лучше делать в пару этапов.
Спустя 13 минут, 52 секунды (18.06.2010 - 11:53) tomash написал(а):
DedMorozzz
Может подскажете как? Знаний много не бывает) Применять или не применять, это второй вопрос!
Может подскажете как? Знаний много не бывает) Применять или не применять, это второй вопрос!
Спустя 21 день, 1 час, 37 минут, 27 секунд (9.07.2010 - 13:31) DedMorozzz написал(а):
tomash, хы, кидал ссылку на тему вопрос увидал
Делается сие через ссылки. Т.е. "(aaa)? ..... (?(1) ...)" - т.е. то что во вторых скобках выполняется лишь тогда, когда то, что в первых выполнено, т.е. условие вышло.
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)