2

これがどこかで答えられている場合、私はそれを見つけることができなかったことをお詫びします。これは、preg_match の php リファレンスから取得されます。

<?php
// get host name from URL
preg_match('@^(?:http://)?([^/]+)@i',
"http://www.php.net/index.html", $matches);
$host = $matches[1];

// get last two segments of host name
preg_match('/[^.]+\.[^.]+$/', $host, $matches);
echo "domain name is: {$matches[0]}\n";
?>

@^ と @i 以外はすべて理解しています。私は大量の正規表現リファレンスを検索しましたが、区切り記号としての @ 記号を除いて言及されていません。ここではそうではありません。

ありがとうございました

4

3 に答える 3

5

@パターン内で が使用されている/ため、より一般的な の代わりにが使用されています。/エスケープすることなく、パターンを読みやすくするだけです。

次の図を描きます (同じパターン)。

@^(?:http://)?([^/]+)@i
/^(?:http:\/\/)?(^\/]+)/i

そして、i他の人が言及したように、パターンは CaseE InsEnSAtive になります。

于 2013-01-29T01:43:08.573 に答える
3

@ ここの区切り文字です。^最初の の後の@は、文字列の先頭から一致を開始する必要があることを示し、 のi後の は、正規表現が大文字と小文字を区別しないことを示すスイッチです。

英数字以外の任意の文字を区切り文字として使用できます。著者が@より標準的な , の代わりに区切り文字を選択した理由/は、正規表現のスラッシュをエスケープする必要がないようにするためです。


正規表現は次と同等です。

'/^(?:http:\/\/)?([^\/]+)/i'
于 2013-01-29T01:41:36.773 に答える
1

@デリミタここに当てはまります。@^またはについて特別なことは何もありません@i@^、およびの記号iはすべて独立しており、次のことを示します。

  1. 正規表現区切り文字 (英数字以外の任意の文字または の組み合わせ{})
  2. 行頭
  3. 大文字と小文字を区別しない修飾子
于 2013-01-29T01:42:59.977 に答える