#1
|
|||
|
|||
pcre multiline
Victor Sudakov написал(а) к All в Jul 19 22:41:18 по местному времени:
Dear All, Почему модификатор s не работает в нижеприведенном примере? Разве не должен конец строки попадать под "."? $ pcretest ~/tmp/koshka.txt PCRE version 8.43 2019-02-23 /koshka.*sobaka/s koshka1 No match koshka2 No match sobaka No match koshka No match koshka33 No match А на https://regex101.com/ если проверить, то матчится при наличии /s. Да и вот так матчится: $ pcregrep -M '(?s)koshka.*sobaka' tmp/koshka.txt koshka1 koshka2 sobaka Victor Sudakov, VAS4-RIPE, VAS47-RIPN --- GoldED+/BSD 1.1.5-b20160322-b20160322 |
#2
|
|||
|
|||
Re: pcre multiline
Eugene Grosbein написал(а) к Victor Sudakov в Jul 19 00:18:51 по местному времени:
08 июля 2019, понедельник, в 22:41 NOVT, Victor Sudakov написал(а): VS> Почему модификатор s не работает в нижеприведенном примере? Разве не должен VS> конец строки попадать под "."? VS> $ pcretest ~/tmp/koshka.txt VS> PCRE version 8.43 2019-02-23 VS> /koshka.*sobaka/s VS> koshka1 VS> No match VS> koshka2 VS> No match VS> sobaka VS> No match VS> koshka VS> No match VS> koshka33 VS> No match Читаем man pcretest: Each data line is matched separately and independently. If you want to do multi-line matches, you have to use the \n escape sequence (or \r or \r\n, etc., depending on the newline setting) in a single line of input to encode the newline sequences. There is no limit on the length of data lines; the input buffer is automatically extended if it is too small. Eugene -- Поэты - страшные люди. У них все святое. --- slrn/1.0.3 (FreeBSD) |
#3
|
|||
|
|||
pcre multiline
Victor Sudakov написал(а) к eugen в Jul 19 23:25:32 по местному времени:
Dear eugen, 09 Jul 19 00:18, Eugene Grosbein wrote to me: VS>> Почему модификатор s не работает в нижеприведенном примере? Разве VS>> не должен конец строки попадать под "."? $ pcretest VS>> ~/tmp/koshka.txt PCRE version 8.43 2019-02-23 /koshka.*sobaka/s VS>> koshka1 No match koshka2 No match sobaka No match koshka No match VS>> koshka33 VS>> No match EG> Читаем man pcretest: EG> Each data line is matched separately and independently. If you EG> want to EG> do multi-line matches, you have to use the \n escape sequence EG> (or \r or EG> \r\n, etc., depending on the newline setting) in a single line EG> of input EG> to encode the newline sequences. There is no limit on the 1. Опция (?s) включает режим dotall: . any character except newline; in dotall mode, any character whatsoever 2. Почему на https://regex101.com/ работает именно так, как я ожидаю (при наличии /s токен "." означает в том числе newline), а в pcretest нет? Victor Sudakov, VAS4-RIPE, VAS47-RIPN --- GoldED+/BSD 1.1.5-b20160322-b20160322 |
#4
|
|||
|
|||
Re: pcre multiline
Eugene Grosbein написал(а) к Victor Sudakov в Jul 19 03:07:21 по местному времени:
09 июля 2019, вторник, в 23:25 NOVT, Victor Sudakov написал(а): VS>>> Почему модификатор s не работает в нижеприведенном примере? Разве VS>>> не должен конец строки попадать под "."? $ pcretest VS>>> ~/tmp/koshka.txt PCRE version 8.43 2019-02-23 /koshka.*sobaka/s VS>>> koshka1 No match koshka2 No match sobaka No match koshka No match VS>>> koshka33 VS>>> No match EG>> Читаем man pcretest: EG>> Each data line is matched separately and independently. If you EG>> want to EG>> do multi-line matches, you have to use the \n escape sequence EG>> (or \r or EG>> \r\n, etc., depending on the newline setting) in a single line EG>> of input EG>> to encode the newline sequences. There is no limit on the VS> 1. Опция (?s) включает режим dotall: VS> . any character except newline; in dotall mode, any character VS> whatsoever Но применяет pcretest это к each data line, то есть только к каждой строке файла по отдельности. VS> 2. Почему на https://regex101.com/ работает именно так, как я ожидаю (при VS> наличии /s токен "." означает в том числе newline), Потому что так и должно быть. VS> а в pcretest нет? Потому что и тут так и должно быть, в соответстиве с маном. Ты ожидаешь одинаковое поведение от разного софта, когда у pcretest явным образом декларировано другое поведение. Eugene --- slrn/1.0.3 (FreeBSD) |
#5
|
|||
|
|||
pcre multiline
Victor Sudakov написал(а) к eugen в Jul 19 23:28:18 по местному времени:
Dear eugen, 10 Jul 19 03:07, Eugene Grosbein wrote to me: VS>>>> Почему модификатор s не работает в нижеприведенном примере? VS>>>> Разве не должен конец строки попадать под "."? $ pcretest VS>>>> ~/tmp/koshka.txt PCRE version 8.43 2019-02-23 /koshka.*sobaka/s VS>>>> koshka1 No match koshka2 No match sobaka No match koshka No VS>>>> match koshka33 No match EG>>> Читаем man pcretest: EG>>> Each data line is matched separately and independently. EG>>> If you want to EG>>> do multi-line matches, you have to use the \n escape EG>>> sequence (or \r or EG>>> \r\n, etc., depending on the newline setting) in a single EG>>> line of input EG>>> to encode the newline sequences. There is no limit on the VS>> 1. Опция (?s) включает режим dotall: VS>> . any character except newline; in dotall mode, any VS>> character whatsoever EG> Но применяет pcretest это к each data line, то есть только к каждой EG> строке файла по отдельности. А, кажется понял: если я хочу потестировать многострочный поиск с помощью pcretest, то мне нужно не реальный многострочный текст помещать в тестовый файл, а имитировать концы строк с помощью "\n" внутри строки? VS>> 2. Почему на https://regex101.com/ работает именно так, как я VS>> ожидаю (при наличии /s токен "." означает в том числе newline), EG> Потому что так и должно быть. VS>> а в pcretest нет? EG> Потому что и тут так и должно быть, в соответстиве с маном. EG> Ты ожидаешь одинаковое поведение от разного софта, EG> когда у pcretest явным образом декларировано другое поведение. А как/чем бы мне из командной строки потестировать сабж, чтобы работало как в https://regex101.com/ ? Victor Sudakov, VAS4-RIPE, VAS47-RIPN --- GoldED+/BSD 1.1.5-b20160322-b20160322 |
#6
|
|||
|
|||
Re: pcre multiline
Eugene Grosbein написал(а) к Victor Sudakov в Jul 19 13:00:35 по местному времени:
11 июля 2019, четверг, в 23:28 NOVT, Victor Sudakov написал(а): EG>>>> Читаем man pcretest: EG>>>> Each data line is matched separately and independently. EG>>>> If you want to EG>>>> do multi-line matches, you have to use the \n escape EG>>>> sequence (or \r or EG>>>> \r\n, etc., depending on the newline setting) in a single EG>>>> line of input EG>>>> to encode the newline sequences. There is no limit on the VS>>> 1. Опция (?s) включает режим dotall: VS>>> . any character except newline; in dotall mode, any VS>>> character whatsoever EG>> Но применяет pcretest это к each data line, то есть только к каждой EG>> строке файла по отдельности. VS> А, кажется понял: если я хочу потестировать многострочный поиск с помощью VS> pcretest, то мне нужно не реальный многострочный текст помещать в тестовый файл, VS> а имитировать концы строк с помощью "\n" внутри строки? Судя по ману, да. VS> А как/чем бы мне из командной строки потестировать сабж, чтобы работало как в VS> https://regex101.com/ ? Никогда не пользовался ни тем, ни тем. Например, при помощи sed и tr заменить переводы строк на \n ? #!/bin/sh # mypcretest sed '$!s/$/\\n/' $* | tr -d '\n' | pcretest Eugene -- Поэты - страшные люди. У них все святое. --- slrn/1.0.3 (FreeBSD) |