Пробел - метасимвол? (в регулярных выражениях)

Любые разговоры которые хоть как-то связаны с тематикой форума

Модератор: Модераторы разделов

Ответить
QWERTYASDF
Сообщения: 989
Статус: Чайник со свистком
ОС: GNU/Linux

Пробел - метасимвол?

Сообщение QWERTYASDF »

Погуглила на тему и нашла для себя противоречие. Дело в том, что к метасимволам в регулярных выражениях относятся все те, которые не соответствуют самим себе в печатном тексте. Сюда входит класс "пробельных" символов, в который по логике входит и сам пробел (или не входит?) Но ведь символ пробела соответствует самому себе в тексте, выдаваемом по шаблону. Кроме того в "обще-абстрактных" регулярных выражениях пробелу инвариатно экранирование бэкслэшем (хотя может тут я ошибаюсь). Да и в гугле не нашла прямого утверждения вида "пробел - метасимвол". Получается, что класс пробельных символов (включая пробел) входит в категорию метасимволов за исключением пробела, что во многих пособиях на тему злостно скрывается? )
Подскажите пожалуйста )
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu
Контактная информация:

Re: Пробел - метасимвол?

Сообщение serzh-z »

QWERTYASDF
В новых RE-движках "\s", кажется, считается более предпочтительным.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Контактная информация:

Re: Пробел - метасимвол?

Сообщение sash-kan »

QWERTYASDF писал(а):
07.09.2012 12:43
Дело в том, что к метасимволам в регулярных выражениях относятся все те, которые не соответствуют самим себе в печатном тексте.
с этого момента, пожалуйста, поподробнее·

QWERTYASDF писал(а):
07.09.2012 12:43
Сюда входит класс "пробельных" символов
куда «сюда»?

ну и вообще, в чём загвоздка?
символы — это не мета-символы·
пробел — символ·
следовательно, не мета-символ·

вода мокрая, снег холодный, и далее по списку·
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
QWERTYASDF
Сообщения: 989
Статус: Чайник со свистком
ОС: GNU/Linux

Re: Пробел - метасимвол?

Сообщение QWERTYASDF »

sash-kan писал(а):
07.09.2012 15:21
QWERTYASDF писал(а):
07.09.2012 12:43
Дело в том, что к метасимволам в регулярных выражениях относятся все те, которые не соответствуют самим себе в печатном тексте.
с этого момента, пожалуйста, поподробнее·

QWERTYASDF писал(а):
07.09.2012 12:43
Сюда входит класс "пробельных" символов
куда «сюда»?

ну и вообще, в чём загвоздка?
символы — это не мета-символы·
пробел — символ·
следовательно, не мета-символ·

вода мокрая, снег холодный, и далее по списку·

Например, в книжке Бена Форты "Регулярные выражения 10 минут на урок" (и во многих других источников в гугле ) для текстового шаблона (регулярного выражения) говорится: "метасимволы есть все символы, не соответствующие самим себе в печати". Ну, т.е. символ "a" в регулярном выражении будет означать нахождение символа "a" в текстовом файле, для поиска текста в котором создается выражение. А вот "." или "[" не будут - они метасимволы. Потом упоминается такой класс метасимволов, как пробельные "\s". Ну вот в этом контексте и вопрос - пробел " " относится к метасимволам или нет?
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Контактная информация:

Re: Пробел - метасимвол?

Сообщение sash-kan »

QWERTYASDF
очень рад за книжку «освойте рокет-сайнс за десять минут»·
надеюсь, в оригинале там нет несуществующего понятия «класс метасимволов»·
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20790
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Пробел - метасимвол?

Сообщение Bizdelnick »

Метасимвол \s соответствует любому пробельному символу, а пробел, не являющийся метасимволом, соответствует сам себе.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Контактная информация:

Re: Пробел - метасимвол?

Сообщение sash-kan »

sash-kan писал(а):
07.09.2012 15:52
очень рад за книжку «освойте рокет-сайнс за десять минут»
ну и не могу не посоветовать читать чуть более соответствующие здравому смыслу издания, например, фридла·
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
QWERTYASDF
Сообщения: 989
Статус: Чайник со свистком
ОС: GNU/Linux

Re: Пробел - метасимвол?

Сообщение QWERTYASDF »

Bizdelnick писал(а):
07.09.2012 15:53
Метасимвол \s соответствует любому пробельному символу, а пробел, не являющийся метасимволом, соответствует сам себе.

Вопром - пробел все-таки является или не является метасимволом в языке регулярных выражений? Была бы благодарна за однозначный ответ )
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Контактная информация:

Re: Пробел - метасимвол?

Сообщение sash-kan »

нет, конечно·
но вы всегда можете сделать свой вариант «языка регулярных выражений»·
в котором будет и класс метасимволов, и пробёл в этом классе·

sash-kan писал(а):
07.09.2012 16:09
и пробёл в этом классе
кстати, придумал для него даже действие: пусть он обозначает строго нулевое количество повторений предшествующего ему символа·
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
QWERTYASDF
Сообщения: 989
Статус: Чайник со свистком
ОС: GNU/Linux

Re: Пробел - метасимвол?

Сообщение QWERTYASDF »

sash-kan писал(а):
07.09.2012 16:09
нет, конечно·
...

Спасибо, я так и думала.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Контактная информация:

Re: Пробел - метасимвол?

Сообщение sash-kan »

QWERTYASDF писал(а):
07.09.2012 15:35
"метасимволы есть все символы, не соответствующие самим себе в печати"
а ведь формулировка-то волшебная!
из разряда «верёвка есть вервие простое»·
или лемовских сепулек·
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: Пробел - метасимвол?

Сообщение drBatty »

QWERTYASDF писал(а):
07.09.2012 12:43
Погуглила на тему и нашла для себя противоречие. Дело в том, что к метасимволам в регулярных выражениях относятся все те, которые не соответствуют самим себе в печатном тексте. Сюда входит класс "пробельных" символов, в который по логике входит и сам пробел (или не входит?) Но ведь символ пробела соответствует самому себе в тексте, выдаваемом по шаблону. Кроме того в "обще-абстрактных" регулярных выражениях пробелу инвариатно экранирование бэкслэшем (хотя может тут я ошибаюсь). Да и в гугле не нашла прямого утверждения вида "пробел - метасимвол". Получается, что класс пробельных символов (включая пробел) входит в категорию метасимволов за исключением пробела, что во многих пособиях на тему злостно скрывается? )
Подскажите пожалуйста )

пробел является обычным символом.
да, во многих реализациях слеш-пробел тоже является обычным символом. \s является метасимволом, который совпадает с пробелом, табуляциями, а также с переводом строки и возвратом каретки. Может и ещё с чем-то, зависит от реализации.
То, что пробел входит в метасимвол \s не должно вас смущать - символ K тоже входит в метасимвол \w, и тем не менее, символ K это обычный символ.

ЗЫЖ тот факт, что пробел можно экранировать - ни о чём не говорит. Большинство обычных символов можно экранировать. За исключением очень немногих, таких как \<, \>, \b, \s и так далее.

sash-kan писал(а):
07.09.2012 15:21
с этого момента, пожалуйста, поподробнее·

очевидно имелось ввиду, что \X совпадает только с X, а вот \< совпадает с началом слова, хотя < совпадает с "меньше".
QWERTYASDF писал(а):
07.09.2012 15:35
и во многих других источников в гугле

QWERTYASDF писал(а):
07.09.2012 15:35
говорится:

а знаете, что написано на очень многих заборах Петербурга и Ленинградской области? Учтите, это всё переводы, а переводчики на 99% == ГСМ. Т.е. сами не понимают, что они пишут. Ей богу, тупой гуглотранслятор и то адекватней - он хотя-бы ничего не додумывает.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: Пробел - метасимвол?

Сообщение drBatty »

sash-kan писал(а):
07.09.2012 16:09
кстати, придумал для него даже действие: пусть он обозначает строго нулевое количество повторений предшествующего ему символа·

э...
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
QWERTYASDF
Сообщения: 989
Статус: Чайник со свистком
ОС: GNU/Linux

Re: Пробел - метасимвол?

Сообщение QWERTYASDF »

drBatty, и все проявившие внимание - спасибо, теперь стало немного яснее.
Спасибо сказали:
Ответить