У меня есть две проблемы, одна из которых является регулярным выражением - PullRequest
4 голосов
/ 24 августа 2009

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

\[url(?:\s*)\]www\.(.*?)\[/url(?:\s*)\]

Я понимаю это. *? выполняет не жадное сопоставление всего во втором регистре.

Что делает?: \ S * в первом и третьем регистрах?

Обновление: По запросу язык C # в .NET 3.5

Ответы [ 4 ]

9 голосов
/ 24 августа 2009

Синтаксис (?:) - это способ поместить круглые скобки в подвыражение без отдельного извлечения этой части строки.

Автор хотел сопоставить часть (.*?) в середине и не хотел, чтобы пробелы в начале или конце мешали. Теперь вы можете использовать \1 или $1 (или любой другой подходящий метод на вашем конкретном языке) для ссылки на доменное имя вместо первого куска пробелов в начале строки

4 голосов
/ 24 августа 2009

?: делает скобки не группирующимися. В этом регулярном выражении вы извлечете только один фрагмент информации, $ 1, который содержит среднее (. *?) Выражение.

2 голосов
/ 24 августа 2009

Что делает?: \ S * в первом и третьем регистрах?

Это соответствует нулю или более пробельных символов, без их захвата.

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

[url]www.foo.com[/url]     # foo.com
[url  ]www.foo.com[/url  ] # same
[url  ]www.foo.com[/url]   # same
[url]www.foo.com[/url  ]   # same

Обратите внимание, что регулярное выражение также соответствует:

[url]www.[/url]      # empty string!

и не соответствует

[url]stackoverflow.com[/url]  # no match, bummer
1 голос
/ 24 августа 2009

Вы можете найти этот листочек регулярных выражений очень полезным (надеюсь). Я провел целую вечность, пытаясь выучить регулярные выражения без удачи. И как только я прочитал этот шпаргалку, я сразу понял, чему я раньше не научился.

http://krijnhoetmer.nl/stuff/regex/cheat-sheet/

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