помогите понять как работает регулярное выражение

sakura

Я читал книжку по perl и увидел там регулярное выражение, которое я не совсем понимаю.
Из описания похоже, что оно первую букву каждого слова в строчке переводит в верхний регистр
$str =~ s/(\w+)/\u\L$1/g;
Какие есть мысли?
или вот такое регулярное выражение:
$val = qr/\b($str)\b/is;
мне не понятно только, на что влияют модификаторы q и r, стоящие перед регулярным выражением? в мануале че-то найти не могу...
ЗЫ не отсылайте меня, пожалуйста, к мануалу, т.к. если я что-то спрашиваю, то перед этим всегда сам пытаюсь найти ответ в литературе...

qsk78

Прочитай perldoc perlre.

skvoria

Я бы сказал "ваще хоть что-нибудь по регуляркам почитай"

sakura

да я вроде регулярками умею пользоваться. меня вводят в забулуждение \u и \L.
\u uppercase next char (think vi)
\L lowercase till \E (think vi)
но они же не изменяют слово, которое находится в $1. почему оно тогда должно переходить в верхний регистр?

artimon

Думаю, там всё-таки написано capitalize. Т.е. первая буква каждого слова становится заглавной.

sakura

да. так и есть. но почему можешь объяснить. Получается, что символы \u и \L изменяют слово в переменной $1?

sergey_m

Да, но это свойство perl, а не регулярных выражений. Совет "почитать что-то по регуляркам" был неправильным. Чтобы понять эти выражения нужно читать man perlre.

Ilya1974

(\w+) - это слово. \L$1 - делает все буквы строчными. \u\L$1 делает первую букву заглавной.
Я не читал маны, интуитивно предполагаю.

sany79

q и r — это не модификаторы. qr/...../ — это способ литерально (буквально) задать RE, скажем, для сохранения в переменной. Подобно тому, как qw/...../ — простой способ задать массив (в предположении, что элементы — слова, не содержащие пробелов).
Например: @a=qw/понедельник вторник/ даёт тот результат, что и @a=('понедельник', 'вторник'). Это синтактическое удобство.
Точно так же qr/...../ -всего лишь удобство.
Попробуй $re=qr/......../; print "$re\n"; и увидишь, как RE хранятся в скаларных переменных. Потом их можно использовать при поиске/замене:
$str=~m/$re/;
Кроме qw/..../ и qr/...../ есть ещё qq/....../, q/......../ и qx/...../. Первое — альтернатива "......", второе — '........', третье — `........`. Про подобные конструкции почитай man perlop раздел "Quote and Quote-like Operators".

artimon

О, какие люди!
Нет, что б просто послать в perldoc perlsyn

Sebasten

Если итак знаешь, почемуб и не ответить?
Оставить комментарий
Имя или ник:
Комментарий: