Объяснение кода регулярных выражений

.net #regex

#.net #регулярное выражение

Вопрос:

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

 System.Text.RegularExpressions.Regex("(?<=<Last>).*(?=</Last>)");
 

Заранее спасибо.

Комментарии:

1. Пять вопросов без выбранных ответов? Выбор ответа на некоторые из ваших вопросов, вероятно, повысит ваши шансы получить ответ здесь.

2. Почему этот вопрос помечен как SQL?

3. Судя по идентификаторам в коде, похоже, что вы ориентируетесь. NET, а не SQL. Тем не менее, эта строка кода не будет компилироваться ни в одном . Чистый язык, о котором я знаю…

4. @Jorn, для меня это похоже на C #. Следует скомпилировать

5. @Abe: Для чего он должен компилироваться? Regex это имя класса, но в этом коде оно вызывается как метод. Я предполагаю, что Твиди хочет вызвать конструктор для Regex класса. В этом случае C # требует new ключевое слово.

Ответ №1:

(?<=<Last>) это взгляд на утверждение. это означает, что он соответствует .* , только если впереди есть <Last>

(?=</Last>) это утверждение о перспективе. гарантирует <Last> , что на .*

Более подробную информацию о регулярных выражениях в .net можно найти здесь, в msdn.

Аннотация, приведенный пример не является полной строкой кода (см. Class Regex в msdn)

Это должно быть частью чего-то подобного:

 Regex MyRegex = new System.Text.RegularExpressions.Regex("(?<=<Last>).*(?=</Last>)");
 

это создает новый объект регулярных выражений.

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

 System.Text.RegularExpressions.Regex.IsMatch(StringToSearchIn, "(?<=<Last>).*(?=</Last>)")
 

Это возвращает значение true или false.

Комментарии:

1. @razlebe Я добавил больше информации, надеюсь, теперь и неопытные читатели смогут извлечь выгоду из этого вопроса и ответа.

Ответ №2:

Как отмечалось ранее, шаблон (?<=<Last>).*(?=</Last>) соответствует самой длинной строке текста, которой предшествует <Last> и за которой следует </Last> , выраженный с помощью положительных поисковых запросов.

Однако обратите внимание, что из-за жадности сама эта согласованная строка также может содержать <Last> и / или </Last>

Ответ №3:

В основном он ищет <Last> теги в некотором XML-документе, включая его содержимое.

?<= — это взгляд на утверждение. Подробное объяснение смотрите здесь.