forum.wfido.ru  

Вернуться   forum.wfido.ru > Прочие эхи > RU.UNIX.BSD

Ответ
 
Опции темы Опции просмотра
  #1  
Старый 08.07.2019, 20:02
Victor Sudakov
Guest
 
Сообщений: n/a
По умолчанию 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  
Старый 08.07.2019, 21:32
Eugene Grosbein
Guest
 
Сообщений: n/a
По умолчанию 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  
Старый 09.07.2019, 20:52
Victor Sudakov
Guest
 
Сообщений: n/a
По умолчанию 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  
Старый 10.07.2019, 00:22
Eugene Grosbein
Guest
 
Сообщений: n/a
По умолчанию 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  
Старый 11.07.2019, 20:52
Victor Sudakov
Guest
 
Сообщений: n/a
По умолчанию 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  
Старый 12.07.2019, 15:45
Eugene Grosbein
Guest
 
Сообщений: n/a
По умолчанию 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)
Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 23:17. Часовой пояс GMT +4.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot