Выделение результата поиска приводит к ошибке PHP [duplicate]

Проблема, как было отмечено ранее в комментариях, заключается в том, что модуль docx несовместим с Python 3. Он был исправлен в этом pull-request на github: https://github.com/mikemaccana/python- docx / pull / 67

Поскольку исключение теперь встроено, решение не должно импортировать его.

docx.py
@@ -27,7 +27,12 @@
 except ImportError:
     TAGS = {}

-from exceptions import PendingDeprecationWarning
+# Handle PendingDeprecationWarning causing an ImportError if using Python 3
+try:
+    from exceptions import PendingDeprecationWarning
+except ImportError:
+    pass
+
 from warnings import warn

 import logging

30
задан Rizier123 7 August 2015 в 16:31
поделиться

2 ответа

Почему возникает ошибка

В PHP регулярное выражение должно быть заключено внутри пары разделителей . Разделителем может быть любой небуквенный символ, не обратный слэш, не-пробельный символ; /, #, ~ являются наиболее часто используемыми. Обратите внимание, что также можно использовать ограничители стиля скобок, где открывающие и закрывающие скобки являются начальным и конечным разделителями, то есть <pattern_goes_here>, [pattern_goes_here] и т. Д. Все действительны.

« Неизвестная ошибка модификатора X "обычно возникает в следующих двух случаях:

  • Когда в вашем регулярном выражении отсутствуют разделители.
  • Когда вы используете разделитель внутри шаблона, не избегая его.

В этом случае регулярное выражение равно <div[^>]*><ul[^>]*>. Механизм регулярных выражений рассматривает все от < до > как шаблон регулярного выражения, а затем все как модификаторы.

Regex: <div[^>  ]*><ul[^>]*>
       │     │  │          │
       └──┬──┘  └────┬─────┘
       pattern    modifiers

] здесь неизвестный модификатор, потому что он появляется после закрытия >. Вот почему PHP выдает эту ошибку.

В зависимости от шаблона, анонимная жалоба-модификатор также могла быть о *, +, p, / или ) или почти любую другую букву / символ. Только imsxeADSUXJu являются действительными модификаторами PCRE .

Как исправить это

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

~<div[^>]*><ul[^>]*>~
│                   │
│                   └─ ending delimiter
└───────────────────── starting delimiter

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

Или разделители escape-кода

/foo[^/]+bar/i, несомненно, вызовут ошибку. Таким образом, вы можете избежать этого, используя обратную косую черту, если она появляется в любом месте регулярного выражения:

/foo[^\/]+bar/i
│      │     │
└──────┼─────┴─ actual delimiters
       └─────── escaped slash(/) character

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

Более чистым способом, конечно же, было бы использование другого разделителя. В идеале символ, который нигде не встречается внутри шаблона регулярного выражения, скажем # - #foo[^/]+bar#i.

More reading:

68
ответ дан Community 3 September 2018 в 14:43
поделиться
14
ответ дан 6 revs 3 September 2018 в 14:43
поделиться
Другие вопросы по тегам:

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