Непоследовательные результаты регулярного выражения [дубликат]

Я читал эти ответы несколько раз, но НЕ ДЕЙСТВИТЕЛЬНО добирался до тех пор, пока не узнал о техническом определении «Вызов путем совместного использования» , как это называется Барбарой Лисков

Семантика вызова путем совместного использования отличается от вызова по ссылке в том, что назначения для аргументов функции внутри функции не отображаются вызывающему (в отличие от ссылочной семантики) [например, если переменная была передана, невозможно смоделировать присвоение этой переменной в области вызывающего. Однако, поскольку функция имеет доступ к тому же объекту, что и вызывающий (без копирования), мутации для этих объектов, если объекты изменяемы, внутри функции видны вызывающему, которые могут отличаться от вызова по значению семантика. Мутации изменяемого объекта внутри функции видны вызывающему, потому что объект не копируется и не клонируется - он является общим.

То есть, ссылки на параметры изменяются, если вы идете и получаете доступ к самого параметра. С другой стороны, назначение параметра исчезает после оценки и не доступно для вызывающего функции.

51
задан Micah 8 November 2010 в 12:39
поделиться

8 ответов

Попробуйте следующее регулярное выражение:

^Red October$

По умолчанию регулярные выражения чувствительны к регистру. ^ отмечает начало совпадающего текста, а $ - конец.

77
ответ дан Pieter van Ginkel 21 August 2018 в 07:50
поделиться

Вам нужно приложить ваше регулярное выражение в ^ (начало строки) и $ (конец строки):

^Red October$
8
ответ дан Anton Gogolev 21 August 2018 в 07:50
поделиться

Извините, но это немного неясно.

Из того, что я читал, вы хотите сделать простое сравнение строк. Для этого вам не нужно регулярное выражение.

string myTest = "Red October";
bool isMatch = (myTest.ToLower() == "Red October".ToLower());
Console.WriteLine(isMatch);
isMatch = (myTest.ToLower() == "The Hunt for Red October".ToLower());
1
ответ дан Dean Thomas 21 August 2018 в 07:50
поделиться
  • 1
    Причина, по которой мне нужно использовать регулярное выражение, заключается в том, что я использую его для поиска в MongoDB, и мне нужно, чтобы он был нечувствительным к регистру, который может выполняться только с помощью регулярного выражения. – Micah 8 November 2010 в 12:52

Согласование всей строки может быть выполнено с помощью ^ и $, как указано в предыдущих ответах.

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

^[Rr][Ee][Dd] [Oo][Cc][Tt][Oo][Bb][Ee][Rr]$
0
ответ дан dorukayhan 21 August 2018 в 07:50
поделиться

Как правило, и с настройками по умолчанию привязки ^ и $ являются хорошим способом обеспечения соответствия регулярного выражения целой строке.

Несколько предостережений:

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

^foo|bar$

, конечно, отличается от

^(?:foo|bar)$

Кроме того, ^ и $ могут принимать другое значение (начало / конец строки вместо начала / конца строки ]), если установлены определенные параметры. В текстовых редакторах, поддерживающих регулярные выражения, обычно это поведение по умолчанию. На некоторых языках, особенно Ruby, это поведение нельзя даже отключить.

Поэтому существует еще один набор якорей, которые гарантированно будут совпадать только в начале / конце всей строки:

\A соответствует в начале строки.

\Z соответствует в конце строки или перед окончательным разрывом строки.

\z соответствует в самом конце строки.

Но не все языки поддерживают эти якоря, особенно JavaScript.

25
ответ дан Tim Pietzcker 21 August 2018 в 07:50
поделиться

Используйте модификаторы ^ и $ для обозначения того, где шаблон регулярного выражения находится относительно начала и конца строки:

Regex.Match("Red October", "^Red October$"); // pass
Regex.Match("The Hunt for Red October", "^Red October$"); // fail
15
ответ дан Tim Robinson 21 August 2018 в 07:50
поделиться

Вы можете сделать это, как этот пример, если я хочу только один раз поймать букву минус a в строке, и ее можно проверить с помощью myRegex.IsMatch ()

^ [^ e] [е] {1} [^ е] $

-1
ответ дан Vincent Roy 21 August 2018 в 07:50
поделиться

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

Простейший способ:

var someString = "...";
var someRegex = "...";
var match = Regex.Match(someString , someRegex );
if(match.Success && match.Value.Length == someString.Length){
    //pass
} else {
    //fail
}
2
ответ дан Zixav 21 August 2018 в 07:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: