8

私は正規表現の専門家ではなく、非常に単純に見え、python 2.7 で動作することを試みて頭を悩ませています: クエリ文字列なしで URL (ホスト名なし) のパスを検証します。つまり、/ で始まる文字列は英数字の値を許可し、これら以外の特殊文字は許可しません: /, ., -

必要なものと非常によく似たこの投稿を見つけましたが、私にとってはまったく機能していません。たとえばaaa、でテストでき、で始まらなくても true が返されます/

私がちょっと働いている現在の正規表現はこれです:

[^/+a-zA-Z0-9.-]

で始まらないパスでは機能しません/。例えば:

  • /aaa-> そうです、これでいいのです
  • /aaa/bbb-> そうです、これでいいのです
  • /aaa?q=x-> false、これで問題ありません
  • aaa-> そうです、これは問題ありません
4

4 に答える 4

6

定義した正規表現は文字クラスです。代わりに、次を試してください。

^\/[/.a-zA-Z0-9-]+$
于 2012-10-17T07:08:01.710 に答える
3

つまり、/ で始まる文字列には英数字の値を使用でき、/、.、- 以外の特殊文字は使用できません。

URL で有効な文字がいくつかありません

import string
import urllib
import urlparse

valid_chars = string.letters + string.digits + '/.-~'
valid_paths = []

urls = ['http://www.my.uni.edu/info/matriculation/enroling.html',
    'http://info.my.org/AboutUs/Phonebook',
    'http://www.library.my.town.va.us/Catalogue/76523471236%2Fwen44--4.98',
    'http://www.my.org/462F4F2D4241522A314159265358979323846',
        'http://www.myu.edu/org/admin/people#andy',
        'http://www.w3.org/RDB/EMP?*%20where%20name%%3Ddobbins']

for i in urls:
   path = urllib.unquote(urlparse.urlparse(i).path)
   if path[0] == '/' and len([i for i in path if i in valid_chars]) == len(path):
        valid_paths.append(path)
于 2012-10-17T07:26:10.740 に答える
0

これを試して:

^(?:/[a-zA-Z0-9.-&&[^/]]*)+$

うまくいくようです。写真を見てください: ここに画像の説明を入力

于 2012-10-17T07:07:45.277 に答える
0

さらにコードを投稿してみてください。質問から正規表現をどのように使用しているかわかりません。私を混乱させているのは、あなたの再表現が[^/+a-zA-Z0-9.-]基本的に言っていることです:

次の場合、単一の文字に一致します。

a/ または az (大文字と小文字の両方) または 0-9 またはドットまたはダッシュではありません

URL 文字列全体ではなく、1 つの文字にのみ一致するため、使用方法を知らなければ意味がありません。

で始められない理由がよくわかりません/

于 2012-10-17T07:08:20.797 に答える