LINUX.ORG.RU

Непонятки с регулярными выражениями.


0

0

Всем доброго времени суток. Есть два не дающих покоя вопроса. 1) Ни в egrep, нигде ещё не работает конструкция "[.smth.]", по крайней мере если я правильно понимаю, что и как она делает(возможность представить несколько букв одной "метабуквой"). Так, пример из мана( egrep '[[.ch.]]*c') выдаёт ошибку "Invalid collation character" 2) Если не "[. .]", то каким образом можно короче записывать регэксп, часть которого представлена в виде "i[^s]...it|i.[^u]..it|i..[^c].it|i...[^k]it|i.{1,3}it|i.{5,}it"(т.е. все слова за исключением одного или большего числа фиксированных)

anonymous

Хм. Извините, уже забыл, как здесь текст оформлять.

Всем доброго времени суток. Есть два не дающих покоя вопроса.
1) Ни в egrep, нигде ещё не работает конструкция "[.smth.]", по крайней мере если я правильно понимаю, что и как она делает(возможность представить несколько букв одной "метабуквой"). Так, пример из мана( egrep '[[.ch.]]*c') выдаёт ошибку "Invalid collation character"
2) Если не "[. .]", то каким образом можно короче записывать регэксп, часть которого представлена в виде "i[^s]...it|i.[^u]..it|i..[^c].it|i...[^k]it|i.{1,3}it|i.{5,}it"(т.е. все слова за исключением одного или большего числа фиксированных)

anonymous
()
Ответ на: комментарий от anonymous

В выражении [.smth.] "." уже "метабуква". Тем более не понятно зачем два раза точка. Если нужна собственно точка, то "\.". Говорю как Perl и подобных.

[smth] значит, любая буква из этого набора.

anonymous_num_0
()

Если я правильно понял, что конструкция [..] позволяет указывать collating element, который завязан на локаль. И локалью четко определены, какие элементы возможны. Например, для испанской локали возможны [.ch.] и [.ll.]. Хотя пример у меня не работает, может локали кривые, а может это умерло в связи с переходом на utf-8.

>каким образом можно короче записывать регэксп (т.е. все слова за исключением одного или большего числа фиксированных)

иногда проще (лучше) записывать несколько регекпов, и делать проверки "входит в регексп", "не входит в регексп", чем городить одно выражение на несколько строк.

mky ★★★★★
()
Ответ на: комментарий от mky

Спасибо за ответ.

Всё ясно, хотя я раньше думал, что регэкспы были изначально нацелены на то, чтобы (почти) любое используемое на практике выражение можно было ими записывать, а не мешать с сед/шелл-клеем.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.