Соответствует строке, которая не содержит определенной последовательности символов - PullRequest
2 голосов
/ 24 августа 2009

Я пытаюсь использовать регулярные выражения для сопоставления строки, которая не содержит последовательность символов меньше символа (<), за которым следует не пробел. Вот несколько примеров </p>

Действительный - "A new description."
Действительный - "A < new description."
Неверно - "A <new description."

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

Буду признателен за любую помощь.

Спасибо
Dale

Ответы [ 5 ]

6 голосов
/ 24 августа 2009
@"^(?:[^<]+|<(?!\s))*$"

Выполнение отрицательного просмотра пробела позволяет ему соответствовать, если последний символ в строке - «<». Вот еще один способ: </p>

^(?!.*<\S).+$

Предварительный просмотр сканирует всю строку на предмет «<», за которым сразу следует непробельный символ. Если он не находит, ". +" Идет вперед и соответствует строке. </p>

1 голос
/ 24 августа 2009

Другими словами, вы допускаете две вещи в вашей строке:

  1. Любой символ, КРОМЕ а <
  2. A < с пробелом.

Мы можем написать это прямо как:

/([^<]|(< ))+/
0 голосов
/ 24 августа 2009

Используйте негативный прогноз: "<(?!)" </p>

0 голосов
/ 24 августа 2009

Я думаю, это то, что вы ищете.

Valid - "A new description."
Valid - "A < new description."
Invalid - "A <new description."



 Try this:   <\S

Это ищет что-то, что имеет знак меньше чем, и после него пропущено место.

В этом случае это будет соответствовать "<n"

Не уверен, насколько вы хотите, чтобы он соответствовал.

0 голосов
/ 24 августа 2009
var reg = new Regex(@"<(?!\s)");
string text = "it <matches";
string text2 = "it< doesn't match";

reg.Match(text);// <-- Match.Sucess == true
reg.Match(text2);// <-- Match.Sucess == false
...