3

<link>タグhrefのみを返す正規表現を作成しようとしています

この正規表現が<ahrefsを含むすべてのhrefを返すのはなぜですか?

    (?<= <link \ s +。*?)href \ s * = \ s * [\'\"] [^ \'\"] +
    <link rel = "stylesheet" rev = "stylesheet"
    href = "idlecore-tidied.css?T_2_5_0_228" media = "screen">
    <ahref="anotherurl">スラッシュボックス</a>

ありがとうございました

4

5 に答える 5

3

また

/(?<=<link\b[^<>]*?)\bhref=\s*=\s*(?:"[^"]*"|'[^']'|\S+)/

また

/<link\b[^<>]*?\b(href=\s*=\s*(?:"[^"]*"|'[^']'|\S+))/

主な違いは[^<>]*?、代わりに.*?. これは、他のタグへの検索を続行したくないためです。

于 2008-11-06T11:54:36.427 に答える
1

このような単純なケースでは後読みを避け、必要なものだけを一致させ、取得したいものをキャプチャします。

<link\s+[^>]*(href\s*=\s*(['"]).*?\2)s および g オプションを使用した The Regex Coach で良い結果が得られました。

于 2008-11-06T12:44:01.413 に答える
0

どの正規表現フレーバーを使用していますか?たとえば、Perlは可変長ルックビハインドをサポートしていません。それがオプションである場合、私は選択します(MizardXからの非常に良いアイデアを実装するために編集されました):

(?<=<link\b[^<>]*?)href\s*=\s*(['"])(?:(?!\1).)+\1

最初の近似として。そうすれば、引用符('または")の選択が一致します。(可変長)後読みをサポートしていない言語でも同じです。

(?:<link\b[^<>]*?)(href\s*=\s*(['"])(?:(?!\2).)+\2)

\1にはあなたのマッチが含まれます。

于 2008-11-06T11:37:43.590 に答える
0
(?<=<link\s+.*?)href\s*=\s*[\'\"][^\'\"]+

Expressoで動作します( Expressoは.NET正規表現エンジンで実行されると思います)。これをもう少し洗練して、クロージング'または ":に一致させることもできます。

(?<=<link\s+.*?)href\s*=\s*([\'\"])[^\'\"]+(\1)

おそらく、正規表現エンジンは後読みアサーションでは機能しません。回避策は次のようになります

(?:<link\s+.*?)(href\s*=\s*([\'\"])[^\'\"]+(\2))

マッチはキャプチャされたグループ1になります。

于 2008-11-06T11:38:11.763 に答える
0
/(?<=<link\s+.*?)href\s*=\s*[\'\"][^\'\"]+[^>]*>/

私はバックリファレンスで少し不安定なので、それをそこに残しました。ただし、この正規表現:

/(<link\s+.*?)href\s*=\s*[\'\"][^\'\"]+[^>]*>/

...私のJavascriptテストで動作します。

于 2008-11-06T11:30:09.610 に答える