2013-02-15 4 views
5
Dim rc As Boolean = "2" Like "*?<*?" 

Я не понимаю, почему гс равно Правда, конечно, 2 не нравится *?<*? вообще.VB.NET Как оператор путаницы с менее чем знак в шаблоне

приведенный выше шаблон требует строку с

  • По крайней мере, три символов (два? 'С и <)
  • , где < символ где-то на внутренней части.

Насколько я могу работать < не специальный символ, который означает нечто иное, чем < к Как оператора.

с помощью Visual Studio 2010.

+0

Не знаю, почему «2» соответствует «<». Тем не менее, он не требует трех символов раньше, поскольку '*' является подстановочным знаком для чего угодно (так что даже нулевые символы). –

+0

Я знаю * соответствует чему угодно, поэтому «2» передает как *, так и? подстановочные знаки, но <все еще отсутствует в матче, как и второй?. –

+1

Любопытно, что если вы удалите хотя бы одну из двух конечных подстановочных знаков, результат будет ложным. – Steve

ответ

1

В то время как я не могу напрямую объяснить, почему 2, как "*?<*?".

Ваш запрос читается;

  • * - Матч 0 или больше символов
  • ? - Вслед за одного персонажа
  • < - за которой следуют < характер
  • * - следует 0 или более символов
  • ? - Отменено одним единственным персоналом

Для вашей логики вы хотите;

по крайней мере, три символа, прежде чем матчи с «<» происходит где-то на внутренней части строки

что приводит к запросе;

Dim rc As Boolean = "2" Like "???*<*" 

Что читается;

  • ??? - Матч по крайней мере 3-х символов
  • * - Вслед за любым количеством дополнительных символов
  • < - Вслед за < характер
  • * - Вслед за любым количеством дополнительных символов

Не прямой ответ Я знаю, но надеюсь, что это все равно поможет ...

EDIT:

Чтобы ответить на ваш комментарий ниже.

Вы бы хотели:

найти строку, которая имеет «<» в нем где-то по крайней мере один символ с обеих сторон

Какие результаты в запросе;

Dim rc As Boolean = "2" Like "*?<?*" 

В результате это приведет к возврату False;

Dim rc As Boolean = "<" Like "*?<?*" 

Однако;

Dim rc As Boolean = "2<2" Like "*?<?*" 

Вернул бы истину.

Я надеюсь, что это поможет (подробнее!)

+0

Что мне нужно сделать, это найти строку с «<» в ней где-нибудь с хотя бы одним символом с обеих сторон. Я могу написать это достаточно легко, используя String.IndexOf и прочее, но я думал, что оператор Like будет простым выходом. Мне также понадобится совпадение для строки с по крайней мере двумя <символами, по крайней мере с одним символом с каждой стороны каждого <символа (я думал *? <*? <*? Сделал бы это, но ясно, что я ошибаюсь). –

+0

См. Мое редактирование! :-D – PGallagher

+0

Whoa, это работает. WHYYYYY !? Какая логическая разница между '? *' И '*?' –

Смежные вопросы