Регулярное выражение: не совпадать, если шаблон в конце строки - PullRequest
2 голосов
/ 29 января 2009

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

<b> <i> <u> </b> </i> </u>

Я бы хотел, чтобы это регулярное выражение НЕ соответствовало этому шаблону, если оно встречается в конце строки.

string = Regex.Replace(string, "\.((<[\/biu]+>)+)", ".$1||")

Ex:

This <b>should match.</b> allright.

This <i><b>shouldn't match.</b></i>

Ответы [ 3 ]

13 голосов
/ 29 января 2009
"\.((<[\/biu]+>)+)(?!$)"

Используйте отрицательное утверждение с символом $, чтобы проверить конец строки. (Помните, что $ соответствует концу строки, поэтому вы хотите, чтобы не соответствовало этому.)

5 голосов
/ 29 января 2009

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

\.(?>(?:<\/?[biu]>)+)(?!$)
3 голосов
/ 29 января 2009

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

"\.((<[\/biu]+>)+)[^<>]+"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...