3

regexURLの最後の2つの文字列のみを単純に一致させるのに最適な方法を見つけようとしています。

たとえば、www.stackoverflow.comでは、 stackoverflow.comと一致させたいだけです。

私が抱えている問題は、たとえば、いくつかの文字列が多数のピリオドを持つ可能性があることです

a-abcnewsplus.i-a277eea3.rtmp.atlas.cdn.yimg.com 

yimg.comのみを返す必要もあります

私が使用しているURLのセットにはパス情報が含まれていないため、文字列の最後の部分は常に.orgまたは.comその性質のものであると見なすことができます。

上記の条件でwww.stackoverflow.comに対して実行するとstackoverflow.comを返し、a-abcnewsplus.i-a277eea3.rtmp.atlas.cdn.yimg.comに対して実行するとyimg.comを返す通常の式はどれですか?

4

4 に答える 4

3

正規表現を使用する必要はありません。代わりに、単純なexplode関数を使用できます。

したがって、URL をピリオドで分割しようとしているので、次のようになります。

$url = "a-abcnewsplus.i-a277eea3.rtmp.atlas.cdn.yimg.com";
$url_split = explode(".",$url);

そして、最後の 2 つの要素を取得する必要があるため、作成した配列からそれらをエコーアウトできます。

//this will return the second to last element, yimg
echo $url_split[count($url_split)-2];
//this will echo the period
echo ".";
//this will return the last element, com
echo $url_split[count($url_split)-1];

したがってyimg.com、最終的には最終出力として得られます。

お役に立てれば。

于 2013-01-14T06:14:58.963 に答える
1

これまでに何を試したかはわかりませんが、次の解決策を提供できます。

/.*?([\w]+\.[\w]+)$/

ここにはいくつかのトリックがあります:

  1. $を使用して、文字列の最後まで一致させます。このようにして、正規表現エンジンが最初から一致をキャッチしないことを確認できます。

  2. 内部のグループ化を使用します(...)。実際には、次のことを意味します。少なくとも1つの文字を含む一致する単語の場合、ドットが必要です(ドットは正規表現で特別な意味を持ち、「そのまま」にしたいので、バックスラッシュを付けてから、少なくとも1つの文字を含む一連の文字を使用します。文字)。

  3. パターンの最初に気が進まない検索を使用します。そうしないと、たとえば、テキストが次の場合など、貪欲な方法ですべてに一致するためです。

    abc.def.gh

貪欲な試合はあなたのグループにf.ghを与えますが、それはあなたが望むものではありません。

ホストには文字しか入れられないと仮定しました(\ wは単語と一致します。おそらく、あなたの例ではもっと複雑なものが必要になります)。

ここに実用的なGroovyの例を投稿します。使用する言語を指定していませんが、エンジンは類似している必要があります。

def  s = "abc.def.gh"
def m = s =~/.*?([\w]+\.[\w]+)$/
println m[0][1] // outputs the first (and the only you have) group in groovy

お役に立てれば

于 2013-01-14T06:32:08.880 に答える
1

多くの言語で動作する Perl 正規表現と互換性のある方法でソリューションが必要な場合は、そのようなものを使用できます-例は PHP にあります

$url = "a-abcnewsplus.i-a277eea3.rtmp.atlas.cdn.yimg.com";

preg_match('|[a-zA-Z-0-9]+\.[a-zA-Z]{2,3}$|', $url, $m);
print($m[0]);

この正規表現は、URL + ドメイン名の最後の部分を取得することを保証します。たとえば、a-abcnewsplus.i-a277eea3.rtmp.atlas.cdn.yimg.comこれで生成されます

yimg.com

出力として、そしてwww.stackoverflow.com(前のトリプルwの有無にかかわらず)それはあなたを与えます

stackoverflow.com

結果として

于 2013-01-14T06:24:01.903 に答える
0

短いバージョン

/(\.[^\.]+){2}$/
于 2013-02-01T15:52:31.067 に答える