Нужно проверить на «\\» (обратная косая черта) в этом Reg Ex

голоса
0

В настоящее время я использую этот рег пример:

\bI([ ]{1,2})([a-zA-Z]|\d){2,13}\b

Это было как раз обратил мое внимание , что текст , который я использую это против может содержать « \» (обратный слэш). Как добавить это выражение?

Задан 10/12/2008 в 01:23
источник пользователем
На других языках...                            


4 ответов

голоса
2

Добавить |\\в группу, после того , как \d, например.

Ответил 10/12/2008 в 01:26
источник пользователем

голоса
1

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

([a-zA-Z]|\d){2,13}

в это ...

([\w]{2,13})

и вы можете также добавить тест для обратной косой черты с этим ...

([\w\x5c]{2,13})

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

"\bI([\x20]{1,2})([\w\x5c]{2,13})\b"

Смотрите также:

Ответил 10/12/2008 в 01:36
источник пользователем

голоса
0

Как я отмечал в своем комментарии к сообщению Славы, в \\-> \bкак обратная косая черта не является символом слова. Поэтому мое предложение

/\bI([ ]{1,2})([\p{IsAlnum}\\]{2,13})(?:[^\w\\]|$)/ 

Я предположил, что вы хотите, чтобы захватить весь 2-13 символов, а не только первый, который применяется, поэтому я настроил мой RE.

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

/\bI([ ]{1,2})([\p{IsAlnum}\\]{2,13})(?=[^\w\\]|$)/ 
Ответил 10/12/2008 в 05:44
источник пользователем

голоса
0

Оба @ slavy13 и @dreftymac дать вам базовое решение с указателями, но ...

  • Вы можете использовать \dвнутри класса символов для обозначения цифры.
  • Вам не нужно ставить пробел в класс символов, чтобы соответствовать его (за исключением, возможно, для ясности, хотя это спорно).
  • Вы можете использовать [:alpha:]внутри класса символов для обозначения альфа - символа, [:digit:]означает цифру, а [:alnum:]для обозначения буквенно - цифровых символов ( в частности , не включая подчеркивания, в отличии от \w). Обратите внимание , что эти классы символов могут означать больше символов , чем вы ожидаете; думать о акцентированных символов и не-арабских цифр, особенно в Unicode.
  • Если вы хотите, чтобы захватить всю информацию после пространства, необходимо повторение внутри захватывающих скобок.

Контрастные поведение этих двух однострочных:

perl -n -e 'print "$2\n" if m/\bI( {1,2})([a-zA-Z\d\\]){2,13}\b/'

perl -n -e 'print "$2\n" if m/\bI( {1,2})([a-zA-Z\d\\]{2,13})\b/'

Учитывая строку ввода « I a123», первые отпечатки «3» , а второй выводит «A123». Очевидно, что если все , что вы хотели, последний символ второй части строки, то исходное выражение отлично. Тем не менее, это вряд ли будет требование. (Очевидно, что если вы заинтересованы только в целой партии, а затем с помощью « $&» дает совпавший текст, но это имеет негативные последствия эффективности.)

Я бы, вероятно, использовать это регулярное выражение, как это кажется ясным мне:

m/\bI( {1,2})([[:alnum:]\\]{2,13})\b/

Время для обязательного штекера: читать «Jeff FRIEDL в Mastering Regular Expressions ».

Ответил 10/12/2008 в 02:37
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more