Как сопоставить всю строку с регулярным выражением?
Мне нужно регулярное выражение, которое будет находить только совпадения, где вся строка соответствует моему запросу.
например, если я выполняю поиск фильмов с именем "Red October", я хочу только соответствовать этому точному названию (без учета регистра), но не соответствовать названиям, таким как "The Hunt For Red October". Не совсем уверен, что знаю, как это сделать. Кто-нибудь знает?
спасибо!
8 ответов:
попробуйте следующее регулярное выражение:
^Red October$
по умолчанию регулярные выражения чувствительны к регистру. Элемент
^
отмечает начало соответствующего текста и$
конец.
как правило, и с настройками по умолчанию,
^
и$
якоря-это хороший способ убедиться, что регулярное выражение соответствует всей строке.несколько предостережений, хотя:
если у вас есть чередование в вашем регулярном выражении, обязательно заключите свое регулярное выражение в группу без захвата, прежде чем окружать его
^
и$
:^foo|bar$
конечно отличается от
^(?:foo|bar)$
и
^
и$
может взять на себя другой смысл (начало/конец строка вместо начала / конца строка) если установлены определенные параметры. В текстовых редакторах, поддерживающих регулярные выражения, это обычно поведение по умолчанию. В некоторых языках, особенно Ruby, это поведение даже не может быть отключено.поэтому существует еще один набор якорей, которые гарантированно совпадают только в начале / конце всей строки:
\A
матчи в начале строка.
\Z
совпадения в конце строки или перед окончательным разрывом строки.
\z
матчи в самом конце строки.но не все языки поддерживают эти якоря, особенно на JavaScript.
использовать
^
и$
модификаторы для обозначения того, где шаблон регулярного выражения находится относительно начала и конца строки:Regex.Match("Red October", "^Red October$"); // pass Regex.Match("The Hunt for Red October", "^Red October$"); // fail
Я знаю, что это может быть немного поздно, чтобы ответить на этот вопрос, но, возможно, это пригодится для кого-нибудь другого.
самый простой способ:
var someString = "..."; var someRegex = "..."; var match = Regex.Match(someString , someRegex ); if(match.Success && match.Value.Length == someString.Length){ //pass } else { //fail }
Извините, но это немного непонятно.
из того, что я читал, вы хотите сделать простое сравнение строк. Вам не нужно регулярное выражение для этого.
string myTest = "Red October"; bool isMatch = (myTest.ToLower() == "Red October".ToLower()); Console.WriteLine(isMatch); isMatch = (myTest.ToLower() == "The Hunt for Red October".ToLower());