Что означает это регулярное выражение? - PullRequest
0 голосов
/ 10 февраля 2010

Что означает этот регулярный экспресс. Я использую схему XML:

([!-~]|[ ])*[!-~]([!-~]|[ ])*

-Dave

Ответы [ 5 ]

3 голосов
/ 10 февраля 2010

Взять по частям. Вот первая часть:

([!-~]|[ ])*

Это означает любое количество (*) символов в диапазоне от ! до ~ (включая ! и ~; это все символы ASCII для печати, если вы посмотрите вверх ! и ~ в таблице ASCII ) или пробеле.

Вот вторая часть:

[!-~]

Это означает, что один символ между ! и ~

Вот последняя часть:

([!-~]|[ ])*

Это означает то же самое, что и первая часть.

Таким образом, это регулярное выражение будет соответствовать любой строке печатных символов ASCII, включая пробелы, при условии, что в строке есть хотя бы один печатный символ ASCII.

2 голосов
/ 10 февраля 2010

Ответы, которые вы получили, похоже, упустили одну из основ RE: «-» в квадратных скобках не означает буквальный «-», если только это не первый или последний символ. Вместо этого '-' определяет диапазон. "!" это (в ASCII, ISO 8859 и т. д.) код символа 33 - первый «видимый» печатный символ. Точно так же в ASCII '~' - это код 126, последний печатный символ.

Следовательно, «[! - ~]» соответствует одному печатному символу (ASCII).

В остальном остальные ответы кажутся разумными.

Редактировать: похоже, когда я писал это, были опубликованы некоторые более точные ответы - мои извинения, если я кого-то обидел, подразумевая иначе. Когда я начал писать это, ответы, которые были опубликованы, были неправильными по этому вопросу.

1 голос
/ 10 февраля 2010

Регулярное выражение состоит из:

  • ([!-~]|[ ])* начинаются с нуля или более символов в диапазоне от ! (0x21) до ~ (0x7E) или пробела (0x20), поэтому в основном все печатные символы от 0x21 до 0x7E плюс символ пробела
  • [!-~], за которым следует один печатный символ
  • ([!-~]|[ ])*, за которым следует ноль или более печатаемых символов или пробел

Таким образом, в основном говорится, что строка должна содержать только печатные символы или пробел, и должен быть хотя бы один печатный символ.

1 голос
/ 10 февраля 2010

Любые символы в диапазоне! до ~ или пробелов, за которыми следует один символ диапазона! до ~, за которым следует любое число из того же диапазона или пробелов. Так что это будет похоже на:

([!-~ ])*[!-~]([!-~ ])*
1 голос
/ 10 февраля 2010

[!-~] Соответствует любому символу между "!" и "~" (представленные символы теоретически зависят от используемой кодировки)

[ ] Соответствует пробелу

(x|y) Соответствует одному из х или у

(x)* Соответствует любому количеству последующих вхождений x, (включая ни одного).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...