Python возвращает несбалансированную скобку при компиляции регулярного выражения [duplicate]

Для этого вам не нужны хакеры exec или shell_exec, это можно сделать на PHP. Книга «Вы хотите сделать ЧТО с PHP?»

Он использует сокеты и функцию pack(), которая позволяет читать и записывать двоичные протоколы. Вам нужно создать пакет ICMP, который вы можете сделать, используя формат CCnnnA * для создания вашего пакета.

0
задан AlanSTACK 4 March 2016 в 14:35
поделиться

1 ответ

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

>>> s='\r'

s содержит символ CR.

>>> re.match('\r', s)
<_sre.SRE_Match object; span=(0, 1), match='\r'>

Здесь строка '\r' представляет собой строку, содержащую CR, поэтому приводится литерал CR к движку регулярных выражений.

>>> re.match('\\r', s)
<_sre.SRE_Match object; span=(0, 1), match='\r'>

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

>>> re.match('\\\r', s)
<_sre.SRE_Match object; span=(0, 1), match='\r'>

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

Обратите внимание, что для механизма регулярных выражений буквальная обратная косая черта - это escape-последовательность \\ (поэтому в строке шаблона r'\\' или '\\\\')

3
ответ дан Casimir et Hippolyte 19 August 2018 в 06:16
поделиться
  • 1
    когда вы говорите, что обратная косая черта игнорируется в вашем последнем примере \CR, означает ли это, что механизм регулярного выражения беззвучно преобразует \CR в CR? Итак, любая неизвестная последовательность просто становится кодом (лишенным от обратной косой черты)? скажем, \X \Y \Z все неизвестны, тогда pat\Xte\Yrn\Z также тихо станет pattern? – AlanSTACK 4 March 2016 в 15:41
  • 2
    @Alan: Точно проверьте себя: re.match(r'\l', 'l') или re.match('\\l', 'l'). Только обратная косая черта игнорируется, а не следующий символ: pat\Xte\Yrn\K становится patXteYrnK для двигателя регулярных выражений. (\Z имеет особое значение) – Casimir et Hippolyte 4 March 2016 в 15:49
Другие вопросы по тегам:

Похожие вопросы: