Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите с regexp'ом

6.5K
16 августа 2004 года
melihov
9 / / 10.06.2004
Помогите сделать regexp, соответствующий беспорядочному множеству больших, маленьких латинских символов, цифр и символов "/", "-" и "_". Проблемы возникают при попытке добавить в выражение последние два символа.

Всем заранее спасибо.
287
17 августа 2004 года
Shiizoo
958 / / 14.03.2004
В perl это выглядит так (можно и подругому ^_^).

my $a = '/12//4-saf31_56aasfaFASfab5215wawe-wqrwqr/345324124-124214_2142144ASfdsa';

if ($a =~ m,(^[a-zA-Z0-9/\-_]+$),) {
print 'Ya!';
}

В php есть re-совместимые REшки, давно их не видел, и хз как они там:)) Ну должно работать, re`шка вроде бы простейшая;)
283
17 августа 2004 года
Alone
910 / / 20.11.2002
$a =~ m,(^[\w/\-]+$),i
287
17 августа 2004 года
Shiizoo
958 / / 14.03.2004
Тож тема, ток я не знаю какие токена, вайлдкарды или как в php держаца=)

Лол, как эт я не заметил)))))) Во-первых в [] задаюцца группы символов, и никакие встроенные токены сюда не вписываюцца=) максимум символ можно экранировать, и то не каждый=) так что [\w] ищет смвол 'w', ну и багодаря ключу i в любых регистрах=) Птом цирфы не входят в '\w', эт токен '\d' =)) И т.п. и т.д., выходит твой пример должен был выглядеть как (^(\w|\d|\/|\-)+$).. Что смотрица довольно неприятно, мой был лучше=) Хотя, кому как, главное не отказывацца от своего стиля=)))

Ну, в общем, бум думать, что Alone просто не выспался и чуток обшибся, знатокам позволительно=))))) Надеюсь, вы мя так же будете поправлять, когда количество постов уйдет за 500 и далее=)
287
17 августа 2004 года
Shiizoo
958 / / 14.03.2004
Глянул я в php ман.. Нифига правда не понял=))))
Но врде вот так:
preg_match ("{^([a-z0-9/\-_]+)$}i",строка);

Ну, если нельзя ограничители произвольные использывать, тогда юзай '/' и заэкранируй слэш в паттерне;)
283
17 августа 2004 года
Alone
910 / / 20.11.2002
Цитата:
Originally posted by Shiizoo
так что [\w] ищет смвол 'w'


бред сивой кобылы...

perldoc perlre

\w Match a "word" character (alphanumeric plus "_")

287
17 августа 2004 года
Shiizoo
958 / / 14.03.2004
Alone, уже час дня, а ты еще спишь=) [\w] ищет именно символ 'w' =) может ты хотел сказать (\w) ?=)) тогда другое дело, но В КВАДРАТНЫХ СКОБКАХ , ИМХО В СКОБКАХ ОПРЕДЕЛЯЮЩИХ СИМВОЛЬНЫЕ ГРУППЫ \w не пойдет..)

Я видимо тож ееще сплю...) но эт тя не поравдывает)
287
17 августа 2004 года
Shiizoo
958 / / 14.03.2004
Да, я кстать тоже ошибся, по поводу \d =)) \w их тож включает=))))) альфанум, альфанум=) Только вот при юзании locale буквы, входящие в \w беруцца из заданной локали, и каков будет результат поиска при включенной русской локали, я даж боюсь предпологать=)) ведь alphanum эт alphabetic и numeric, то есть алфавитные буковки и цифры;) а алфавитные буквы эт отнюдь не только латиница=)
287
17 августа 2004 года
Shiizoo
958 / / 14.03.2004
Вот конкретный пример щас приведу. Тот кусок кода что я показывал выше, у мя еще окошко открыто=))))
дописал туда от заголовка это:

use strict;
use locale;
use POSIX qw(locale_h);

setlocale(LC_CTYPE, "Russian_Russia.1251";);

Следовательно, локаль для CTYPE, от чего зависят регитсровые преобразования и все re`шки перла теперь содержит и cp1251 символику. Добавляю в перменную кирилицу:

my $a = '/12//4-saf31_56aasfaFASfab5215wawe-wqrwqr/345324124-124214_2142144ASfdsaяпавпвап';

Теперь меняю паттерн, но не тот, кторый ты показал, потому что он никак не заработает, а на вот этот. Ты должен понимать, что он рабочий=))):

if ($a =~ m,(^(\w|\/|\-)+$),) {
print 'Ya!';
}

У меня, как и вчера, в результате выписывается 'Ya!', что говорит о моей правоте. Юзание \w в данном случае не уместно, хотя бы в силу того, что n00b`ы любя ковырять локали, и все прочее, когда у них возникают проблемы, и если у него будет стоять русская, и скорее всего она будет применена к LC_ALL, то шаблон будет брать еще и кирилицу, что ему, исходя из содержания его просьбы, совсем не надо=))

EOF
283
17 августа 2004 года
Alone
910 / / 20.11.2002
эхх...
документацию мы читать не хотим... понятно...
довай так, вот пример:

my $qq="/qwertyQ_123456 qqq";
print $qq=~/([\w]+)/;
говориш что выводит и почему
287
17 августа 2004 года
Shiizoo
958 / / 14.03.2004
Угу, моя ошибка, но вот я добавил в твой скаляр русские буквы и паттерн все-равно сработал=) А знаешь почему? потому что у меня винда, и в переменной окружения установлена русскай локаль.. Так что \w не катит, делать скрипты, лишний раз зависимые от установок оси - дело наблагородное=)
287
18 августа 2004 года
Shiizoo
958 / / 14.03.2004
В общем пришли к окончательному выводу, я думаю все пришли, не я один=)

Юзаем или мое: ,^[a-zA-Z0-9/_-]+$,
Или Alone`овское: ,^[\w/-]+$, (но тогда меняем локаль на сишную, или какую-нить латинскую, чтоб лишних символов в alphanum не было).
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог