2017-01-21 3 views
1

私が直面している問題は、何らかの理由でわからない論理的な推論のほうが多いです。正規表現とコーディング関連です。.NET - Regex Pattern Matching

これは、ドキュメントからリンクを抽出するために使用するパターンです。

http(s)?://([\w+?\.\w+])+([a-zA-Z0-9\~\!\^\&\*\(\)_\-\=\+\\\?\/\.\:\;\'\,]*)? 

それはそれを一緒にコンパイルするために私にしばらく時間がかかったが、それは本当によく働く、二つのリンクが接続されている場合しかし、私の問題は、それが単一のマッチとしてそれらを抽出している、すべてのドキュメントからリンクを抽出します。

正規表現パターンの末尾に "http"を置いて、検索を終了させようとしましたが、これはうまくいかずでした。 たとえば、次のような2つのリンクは1つの一致として表示されます(元の文書のように見られます)。

http://www.preemptive.com/dotfuscator/dtd/dotfuscatorMap_v1.0.dtd/dotfuscatorMap_v1.0.dtdhttp://www.preemptive.com/dotfuscator/dtd/dotfuscatorMap_v1.1.dtd/dotfuscatorMap_v1.1.dtd 

見てみたい場合は正規表現コードを使用してください。

Dim regexFunc As New Regex("http(s)?://([\w+?\.\w+])+([a-zA-Z0-9\~\!\^\&\*\(\)_\-\=\+\\\?\/\.\:\;\'\,]*)?", RegexOptions.IgnoreCase) 
     Dim matches As MatchCollection = regexFunc.Matches(_dataLoaded.ToString) 

     For Each x As Match In matches 
      '// A match has been found, can contain one or more links connected. 
     Next 

質問:試合は複数のリンクを持っている場合、私は..と言う配列にそれらのそれぞれを保存することができるように、それはリンクのそれぞれを分離したときにどのようにそれを持ってするには?おかげさまで

+1

「https」:// \ w +(?:\。\ w +)+(?:(?!https?://)[a-zA-Z0-9〜!& * )_ = + \\?/。:; '、 - ])* ""、https://regex101.com/r/ihSKvA/2を参照してください(このコメントからパターンをコピー/ペーストしないでください。 '()'の後) –

+0

良い量指定子の使い方... @WiktorStribiżew – Codexer

+0

これは実際にはかなりうまく動作します。私のニーズに合わせてここを少し変更しましたが、全体的にはその仕事をしています。 ウェブサイトもありがとう@WiktorStribiżew – Karizan

答えて

0

あなたは否定先読み(そうtempered greedy tokenと呼ばれる)と貪欲quantfied文字クラスを和らげることがあります。

https?://\w+(?:\.\w+)+(?:(?!https?://)[a-zA-Z0-9~!^&*()_=+\\?/.:;',-])* 
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 

regex demo(不要なグループとエスケープが削除されている)を参照してください。 [\w+?\.\w+]ワード文字または+?又は.いずれかで1+文字に一致する(これはエスケープ角括弧に)文字クラスであることを

注意。ですから、私は\w+(?:\.\w+)+のように書き直すことをお勧めします(あなたの要件に合わせて調整してください)。

正規表現が何らかのXML形式で格納されている場合、&はOKです。それ以外の場合は&と置き換えてください。

詳細

  • https?:// - http://又はhttps://
  • \w+ - 1+単語文字
  • (?:\.\w+)+ - ドットの1+配列および1+単語文字
  • (?:(?!https?://)[a-zA-Z0-9~!^&*()_=+\\?/.:;',-])* -を開始しない文字クラスで定義されている任意のcharに一致する、強化された貪欲なトークンまたはhttps://文字シーケンス。