экранировать апостроф в строке регулярных выражений, которая начинается и заканчивается апострофом в дротике - PullRequest
0 голосов
/ 22 декабря 2018

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

Для этого я нашел следующее регулярное выражение:

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

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

теперь с помощью дротика я могу экранировать символы с \, поэтому, если я хочу экранировать апостроф в строке, которую я начинал и заканчивал апострофом, я могу просто сделать это:

final String a = 'foo\'bar';

но с final String a = r'foo\'bar' я получаю ошибку.как я могу избежать этого?

спасибо

1 Ответ

0 голосов
/ 22 декабря 2018

Нет, r'' не означает «регулярное выражение». Это означает «raw» , поэтому обратная косая черта интерпретируется как буквальная обратная косая черта, а не как escape-символ.

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

Регулярные выражения создаются как экземпляры класса RegExp .

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

String pattern = r"(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|" + r'"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])';
RegExp exp = new RegExp(pattern);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...