Почему это регулярное выражение без специального символа соответствует более длинной строке? - PullRequest
2 голосов
/ 06 февраля 2009

Я использую этот метод, чтобы попытаться найти совпадение, например:

Regex.Match("A2-TS-OIL", "TS-OIL", RegexOptions.IgnoreCase).Success;

Я получил истинный результат. Я сбит с толку. Я думаю, что это должно вернуть false, так как в шаблоне нет специальных символов. Если я использую ".+TS-OIL", должно быть возвращено true (. для любого и + для более чем 1). Как мне поступить, чтобы получить то, что мне нужно?

Ответы [ 4 ]

11 голосов
/ 06 февраля 2009

Соответствие регулярному выражению не обязательно должно начинаться с начала ввода. Возможно, вы захотите:

^TS-OIL

, если вы хотите совпадать только в начале. Или:

^TS-OIL$

для предотвращения его соответствия TS-OIL-123.

^ соответствует началу ввода, $ соответствует концу.

Я считаю, что есть место, где ^ и $ добавляются автоматически (например, элементы веб-проверки), но они являются исключением.

Кстати, вы можете использовать:

Regex.IsMatch(...)

в этом случае, чтобы сохранить несколько нажатий клавиш.

5 голосов
/ 06 февраля 2009

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

Regex.Match("A2-TS-OIL", "^TS-OIL", RegexOptions.IgnoreCase).Success;

^ указывает, что совпадение должно начинаться с начала строки.

1 голос
/ 06 февраля 2009

Существует неявное. * В начале и конце строки выражения. Вам нужно использовать ^ и $, которые представляют начало и конец строки, чтобы переопределить это.

0 голосов
/ 06 февраля 2009

TS-OIL - это подстрока в вашем A2-TS-OIL. Таким образом, это приведет к совпадению. У вас самое простое совпадение - буквальная подстрока. Если вы хотите, чтобы TS-OIL не соответствовал, вы также можете попробовать (?! ^ A2 -) (TS-OIL), предполагая, что вы не хотите, чтобы он начинался с A2-, но могут потребоваться другие вещи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...