Как их сделать?
Положим у меня есть текст:
"(ключевое слово) нужный мне текст."
Как мне группу(атом) с ключевым словом сделать условием, не входящим в итоговое совпадение?
P.S. Вообще какая терминология нормальная? А то позитивные проверки, заглядывания, подглядывания, и в итоге непонятно даже, что в гугл вбивать.
grep позиционные проверки
Модераторы: /dev/random, Модераторы разделов
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: grep позиционные проверки
вы можете русским языком написать, что вам надо? желательно с примерами.
-
- Сообщения: 310
Re: grep позиционные проверки
drBatty
К примеру, что-бы команда:
команда | grep -o "регексп"
возвращала "ВС" только в тех случаях, когда оно следует после "A".
"DBC" "HBC" - не подойдут
"ABC" "ABCD" подойдут.
вы можете русским языком написать, что вам надо? желательно с примерами.
К примеру, что-бы команда:
команда | grep -o "регексп"
возвращала "ВС" только в тех случаях, когда оно следует после "A".
"DBC" "HBC" - не подойдут
"ABC" "ABCD" подойдут.
-
- Администратор
- Сообщения: 5405
- ОС: Gentoo
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: grep позиционные проверки
Утверждения
Утверждения - это проверки касательно символов, идущих до или после текущей позиции сопоставления, ничего при этом не поглощая (никакие символы исходного текста не ставятся в соответствие утверждениям). Наиболее простые варианты утверждений, такие как \b, \B, \A, \Z, \z, ^ и $ были рассмотрены ранее. Более сложные утверждения записываются как подмаски. Утверждения бывают двух видов: те, которые анализируют текст, предшествующий текущей позиции, и идущий после нее.
Сопоставление подмаски, содержащий утверждение, происходит обычным образом, за исключением того, что текущая позиция не изменяется. Утверждения касательно последующего текста начинаются с (?= для положительных утверждений и с (?! для отрицающих утверждений. Например, \w+(?=;) совпадает со словом, за которым следует символ ';', но при этом сама точка с запятой в совпадение не включается. А foo(?!bar) соответствует любому появлению "foo", после которого не идёт "bar". Заметим, что похожий шаблон (?!foo)bar не будет искать вхождение "bar", которому предшествует любая строка за исключением "foo". Но, тем не менее, он будет соответствовать любым вхождениям подстроки "bar", поскольку условие (?!foo) всегда TRUE, если следующие три символа - "bar". Для получения желаемого результата необходимо воспользоваться второй категорией утверждений.
-
- Сообщения: 310
Re: grep позиционные проверки
/dev/random
Во, спасибо!!
Вот только grep жалуется, что ретроспективное утверждение имеет неконечную длину. Это можно обойти?
Вот собако, и в руби тоже низя делать эти "look behind" произвольной длины. (
Во, спасибо!!
Вот только grep жалуется, что ретроспективное утверждение имеет неконечную длину. Это можно обойти?
Вот собако, и в руби тоже низя делать эти "look behind" произвольной длины. (
-
- Сообщения: 390
- ОС: gentoo
Re: grep позиционные проверки
Забавно, вновь о том же, о заглядывании ☺.
В регулярных выражениях perl — нельзя обойти, если -P в grep полностью соответствует perl5, то — нет.
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: grep позиционные проверки
можно вообще обойтись без заглядования. только для этого grep мало, нао sed|perl|etc...