2011-01-10 8 views
2

NOTマッチを行うために使用できる正規表現が必要です。例えば、以下のURLの正規表現を使用して文字列内の単語を無視する方法

http://www.site.com/layout/default.aspx 
http://www.site.com/default.aspx 
http://www.site.com/layout.aspx 

正規表現は

http://www.site.com/layout/default.aspx 

をディレクトリ「レイアウト」を含む任意のURL文字列に一致するべきではなく、代わりに、どのようにすることができ

http://www.site.com/default.aspx 
http://www.site.com/layout.aspx 

に一致している必要がありましょう.NET正規表現を使用してこれを行うには?

+1

使用しているツールによって異なります。 –

+0

私の答えは、ほとんどの正規表現の実装でサポートされている否定的な先読みで行うことができます。 –

答えて

3

否定先読みを使用:

^(?!.*/layout/)

あなたは、文字列の先頭に固定するのに持っているか、あなたは一人で、すなわち(?!/layout/)が動作しません偽陽性を得るでしょう。

+0

ありがとう、これはちょっと働いた。私は 'h t t p:// domain /(?!。* layout /)。+'を使用して一致を返す必要があるので、私は励ましました。 – Fixer

+0

うれしい私は助けることができます。 '(?!。*/layout /)http:// domain /.+'あなたが少しきれいにしたいなら、 –

0

/layout/と一致し、使用する言語を問わず結果を逆転させます。

など。 PHPで:

if(!preg_match('#/layout/#i', $url)) { 
    // does not match layout 
} 
0

PYTHON:あなたは1つの正規表現ですべてを圧迫する必要がある場合は、この線に沿って否定先読み、何かをしようと

1

 
import re 
if not re.match('layout'): 
     #do whatever here 

再pythonのための正規表現は次のとおりです。

(?!layout)

+0

"layout"の後に続く文字列の最初の場所と一致するため、これは機能しません。 –

+0

@Bennor McCarthy:はい、URLの本当の正規表現と組み合わせればうまくいきます。 (http:// [-a-z0-9] + .com /((?!layout)。+ /)* [^。このようなもの(粗い、テストされていない、 ] + \ .. + 'この正規表現を実際に使用しないでください。すべてのファイルがname.extensionの形式を持つように、多くの間違った前提があります。 – orlp

+0

ええ、十分ですが、文字列内の正確な場所に束縛しています(要件によっては大丈夫かもしれません)。 –

関連する問題