Еще один способ решить эту проблему - уловить сгенерированную ошибку и не реконструировать ее:
catch (ThreadAbortException) {}
Какими персонажами вы должны и которые вы не должны убежать, действительно зависит от того, с чем вы работаете.
Для PCRE и большинства других так называемых Perl-совместимых ароматов избегайте этих внешних классы символов:
.^$*+?()[{\|
и эти внутренние классы символов:
^-]\
Для POSIX расширенных регулярных выражений (ERE), избегайте этих внешних классов символов (таких же, как PCRE):
.^$*+?()[{\|
Выключение любых других символов является ошибкой с POSIX ERE.
Внутри классов символов обратная косая черта является буквальным символом в регулярных выражениях POSIX. Вы не можете использовать его, чтобы избежать чего-либо. Вы должны использовать «умное размещение», если хотите включить метасимволы класса символов в виде литералов. Поместите ^ в любом месте, кроме как в начале, в начале, а в начале или в конце класса символов, чтобы соответствовать этим буквально, например:
[]^-]
В основных регулярных выражениях POSIX (BRE), это метасимволы, которые вам нужно убежать, чтобы подавить их смысл:
.^$*
Выпуски из круглых скобок и фигурных скобок в BRE дают им особый смысл, который их неописуемые версии имеют в ERE. Некоторые реализации (например, GNU) также придают особое значение другим символам при экранировании, например \? и +. Сброс символа, отличного от. ^ $ * () {}, Как правило, является ошибкой с BRE.
Внутри классов символов BRE следуют тому же правилу, что и ERE.
Если все это делает голова спина, возьмите копию RegexBuddy . На вкладке «Создать» нажмите «Вставить маркер», а затем «Литерал». RegexBuddy добавит экраны при необходимости.
Включает C, C ++, Delphi, EditPad, Java, JavaScript, Perl, PHP (preg), PostgreSQL, PowerGREP, PowerShell, Python, REALbasic, Real Studio, Ruby , TCL, VB.Net, VBScript, wxWidgets, XML Schema, Xojo, XRegExp.PCRE совместимость может различаться
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Anywhere: . ^ $ * + - ? ( ) [ ] { } \ |
Включает поддержку awk, ed, egrep, emacs, GNUlib, grep, PHP (ereg), MySQL, Oracle, R, sed.PCRE версии или с помощью расширений
ERE / awk / egrep / emacs
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Вне класса символов: . ^ $ * + ? ( ) [ { } \ |
& nbsp; & nbsp; & nbsp; & nbsp; Внутри класса символов: ^ - [ ]
BRE / ed / grep / sed
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ; & nbsp; внутри класса символов: ^ - [ ]
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; g16]
\xFF
] -
требуется только экранирование в классе символов, но я сохранил их в одном списке для простоты "(\")(/)(\\.)"
по сравнению с /(")(\/)(\.)/
в JavaScript) -
или ]
для экранирования вне классов символов. POSIX (BRE / ERE) не имеет escape-символа внутри классов символов. Реджейный вкус в RTL Delphi на самом деле основан на PCRE. Python, Ruby и XML имеют свои собственные вкусы, которые ближе к PCRE, чем к POSIX.
– Jan Goyvaerts
23 February 2017 в 09:05
К сожалению, значение таких вещей, как (и \ (меняются между регулярными выражениями стиля Emacs и большинством других стилей). Поэтому, если вы попытаетесь избежать этого, вы можете делать противоположное тому, что вы хотите.
Итак, вам действительно нужно знать, какой стиль вы пытаетесь процитировать.
/
не является метасимволом в любом из ароматов регулярного выражения, о котором я упоминал, поэтому синтаксис регулярных выражений не требует его ускорения. Когда регулярное выражение цитируется как литерал на языке программирования, тогда правила форматирования строки или регулярного выражения этого языка могут потребовать экранирования/
или"
или'
и могут даже потребовать `\` вдвойне сбежал. – Jan Goyvaerts 7 February 2015 в 00:39