/ /私には2つの問題がありますが、そのうちの1つは正規表現です-c#、regex、.net-3.5

私は2つの問題があります。そのうちの1つは正規表現です - 正規表現、正規表現、.net-3.5

私が書いていないコードを更新していますが、その一部は次のような正規表現です:

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

という事は承知しています 。*? 2番目のレジスタ内のすべての貪欲でない一致を行います。

1番目と3番目のレジスタの?:s *は何をしますか?

更新: 要求に応じて、言語は.NET 3.5のC#です。

回答:

回答№1については9

構文 (?:) 部分式を括弧で囲む方法です なし 文字列のその部分を個別に抽出します。

著者は (.*?) 途中の部分であり、最初または最後のスペースが邪魔にならないようにしたかったのです。 1 または $1 (または適切な方法が特定の言語である場合)文字列の先頭にあるスペースの最初のチャンクの代わりにドメイン名を参照する


回答№2については4

?:括弧を非グループ化します。その正規表現では、「中間(。*?)式を含む1つの情報$ 1のみを引き出します。


答え№3の2

1番目と3番目のレジスタの?:s *は何をしますか?

ゼロ個以上の空白文字を、キャプチャせずに一致させます。

正規表現の作成者は、角括弧タグの末尾の空白を許可し、「www。」に続くすべてのDNSラベルと一致させる予定です。そのようです:

[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

回答№4の場合は1

この正規表現チートシートを見つけることができます非常に役に立ちます(うまくいけば)。私は何年もかけて、運良く正規表現を学ぼうとしました。そして、このチートシートを読むと、以前に学べなかったことをすぐに理解しました。

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