LINUX.ORG.RU

Регулярные выражения?


0

0

Нужно написать шаблон, описывающий строку, которая не содержит два идущих подряд пробела и символа новой строки.

С символом новой строки я вродебы разобрался [^\n|\r\n] - как я понял из документации это что-то типа не \n и не \r\n.

А вот как написать не два идущих подряд пробела? И как в целом будет выглядеть этот шаблон?

Регулярные выражения я использую в flex, вернее в файле scan.l, который flex переделавыет в сишный. Хотя как я понял это не очень важно в Linux все регулярные выражения более или менее похоже, и пока что для меня представляются полной абракодаброй.

Помогите.

ЗЫ

Если кому-нибудь это интересно, есть файл и там строки имеют вид: что-то(может содержать непечатные символы) два пробела (опять что-то) и конец строки. Покак что родил " "- два пробела \n|\r\n-символ новой строки

а вот как самое главное описать не знаю.

Я говорил помогите. Помогите...

anonymous

Ответ на: комментарий от vilfred

А как будет НЕ \s\s? Строка не должна содержать двойного пробела. [^какой-то символ] - это не этот символ. А вот как НЕ несколько символов.

Правила построения шаблонов теже что и в ed, vi, sed,awk, egrep. Если кто-нибудь работал хоть с какой-то из этих утилит помогите, пожалуйста.

anonymous
()

'[^\s]+' - один и более символов, либо проще [^\s\s] более точные и конкретные решения - все перловые.

но на самом деле писать [^\s\s\n\n\r] нельзя, так как этот регех будет работать для просто перевода каретки, так как кватификатор группы по отрицанию ищет любой из того, что указано в [blah-blah], тоесть я бы написал [^\s\s][^\n|\r\n]

не знаю, как в шелле или авк, но в перле так, а регекспы, говорят, из авк в перл пришли.

anonymous
()

> Нужно написать шаблон, описывающий строку, которая не содержит два
> идущих подряд пробела и символа новой строки.

вообще то строкой называют последовательность символов которая завершается символом новой строки означающий конец строки поэтому написать регексп который матчит строку не содержащюю \n не реально

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

to lg

Ну не строку, называй как хочешь. Множество символов, которое не содержит а) двух идущих подряд пробелов б) символа новой строки как то: \n или \r\n

Это реально?

anonymous
()

[^\s\s][^\n|\r\n] не работает, что и понятно. Т.к. [^\s\s]==[^\s], а это уже не два подряд пробела. По сути я не понимаю как написать НЕ два символа, написать что НЕ один символ можно.

Что никто не пользуется регулярными выражениями?

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