0

ドメイン名に特定の単語が含まれていない URL を正規表現で取得したいのですが、クエリ文字列またはドメインの他のサブディレクトリにその単語が含まれているかどうかは関係ありません。 http/fttp/https/それらのいずれもありません。この表現を見つけました ^((?!foo).)*$") これらの条件に適合するようにどのように変更すればよいかわかりません。これらは、「foo」という単語の受け入れられた URL です。

whatever.whatever.whatever/foo/pic
whatever.whatever.whatever?sdfd="foo"

これらは受け入れられません。

whatever.whateverfoo.whatever
whatever.foowhatever.whatever
whatever.foo.whatever.whatever
whatever.whatever.foo.whatever
4

3 に答える 3

1

これを試してください(説明):

^(?:(?!foo).)*?[\/\?]

これが意味することは、基本的に次のとおりです。

  1. 含まないものに一致foo
  2. スラッシュまたは疑問符に遭遇するまで

正確な構文は、プログラミング言語/エディターによって異なる場合があります。説明リンクは、PHP の例を示しています。私が使用した正規表現要素はかなり一般的であるため、うまくいくはずです。そうでない場合は、お知らせください。

この正規表現は、一度に 1 つの URL に対してのみ照合できます。したがって、regex101 でこれを試す場合は、すべての URL を一度に入力しないでください。


更新: Java の例 (現在はturnerの代わりに使用foo):

Pattern p = Pattern.compile("^(?:(?!turner).)*?[\\/\\?].*");
System.out.println(p.matcher(
    "i.cdn.turner.com/cnn/.e/img/3.0/1px.gif").matches());
System.out.println(p.matcher(
    "www.facebook.com/plugins/like.php?href=http%3A%2F%2F"
    + "www.facebook.com%2Fturnerkjl‌​jl").matches());

出力:

false
true
于 2013-09-26T18:09:21.870 に答える
0

これがJavaの正規表現です

"^[^/?]+(?<!foo)"

説明 - 最初から / または ? に一致しない文字を検索します。上記の 2 つの文字のいずれかが見つかった時点で、パターンは foo の否定一致を後方検索します。foo が見つかった場合は false を返し、それ以外の場合は true を返します。これはJavaにあります。また、正規表現は言語によって異なります。

grep cmd (UNIX またはシェル スクリプト) では、次の正規表現の一致を否定する必要があります。

"^[^/?]+foo"
于 2013-09-26T18:35:09.450 に答える