2009-08-26 8 views
0

私のユーザにとっては、テキストエリアに複数のドメイン名を入力できる画面を表示する必要があります。ユーザーは、ドメイン名を別の行に置くことも、スペースやコンマで区切ることもできます(おそらくセミコロンでもありません)。入力したドメイン名のPHP解析用テキストエリア(空白、カンマ、改行で区切られたもの)

個々のドメイン名を解析して識別する必要があります、他のものは無視することができます)。

ユーザ入力ができるように:

asdf.com

qwer.com

AND/OR

wqer.com、gwew.com

AND/OR

ertert.com gdfgdf.com

誰もwww.abczone.comのような3レベルのドメインを入力する人はいませんが、もしそうであれば私はabczone.comの部分だけを抽出することに興味があります。 (私はそれを検証/抽出するために別々の正規表現を持つことができます)。

答えて

1

これはそれを行います。

(\b[a-zA-Z][a-zA-Z0-9-]*)(?=\.com\b) 

「は、その後.com単語の区切りに続く文字、数字、またはハイフンに続く文字のすべてのシーケンスを検索します。」

(あなたがbim.command.comからbim.comを拾うから保護するために最後のビットを必要とする。)

Pythonのテストケースを私は手にPHPのテスト環境を持っていないので:

DATA = "asdf.com\nx-123.com, gwew.com bim.command.com 123.com, x_x.com" 
import re 
print re.findall(r'(\b[a-zA-Z][a-zA-Z0-9-]*)(?=\.com\b)', DATA) 
# Prints ['asdf', 'x-123', 'gwew', 'command'] 
+0

ほとんどが、:1)ドメイン名は数字で始めることはできません、2)ドメイン名cをアノテーションに63文字以上の文字が含まれている、3)ドメイン名に「_」を含むことはできません。 –

+1

@eyze:1と3が固定されました。 – RichieHindle

+0

@ RichieHindle:また、.comがキャプチャしていないグループの中にあるのはなぜですか?私の見地からする必要はありません。 –

0

ここにあります、あなたは私の修飾子を使用して、あなたがしたい場合は、大文字AZを削除するすべてのことができます。

\b([a-zA-Z][0-9a-zA-Z\-]{1,62})\.com\b 
+0

悲しいことにこれも悲しいことです"this-domain-name-is-longer-than-63-characters-and-hence-not-valid.com"で失敗し、 "domain-name-is-longer-than-63-characters-and-有効ではありません"。 – RichieHindle

+0

@ RichieHindle:有効なドメインと見なすことができるサブストリングを見つけた場合、私は同意しません。あなたの実装では存在できないドメイン名が返されるだけですが、それは何でもかまいません。 –

関連する問題