-6

私は初心者です。私はいつも友達と冗談を言いたいと思っていたので、どうしたらいいのか考えていました。お答えいただけますか?ありがとう!

4

1 に答える 1

18

あなたはそれがどのように機能するのか疑問に思うかもしれません. さまざまな方法でそれを行う方法を説明しようと思います。まず、正規表現がどのように機能し、どのように使用されるかについて説明します。


正規表現 - 正規表現

コンピューティングでは、正規表現 (略して regex または regexp) は検索パターンを形成する一連の文字であり、主に文字列とのパターン マッチング、または文字列マッチング (つまり、「検索と置換」のような操作) で使用されます。

基本構文

正規表現を使用するには、まず構文を学ぶ必要があります。この構文は、一連の文字、数字、ドット、ハイフン、および特殊記号で構成されており、さまざまな括弧を使用してグループ化できます。

^               The circumflex symbol matches the beginning of the input string or line, although in some cases it can be omitted
$               Same as with the circumflex symbol, the dollar sign matches the end of the input string or line
.               The period matches any single character
?               It will match the preceding pattern zero or one times
+               It will match the preceding pattern one or more times
*               It will match the preceding pattern zero or more times
|               Boolean OR
-               Used when describing a range of elements
()              Groups pattern elements together
[]              Matches any single character between the square brackets
{min, max}      Used to match exact character counts, where min and max are integers
\d              Matches any single digit
\D              Matches any single non digit caharcter
\w              Matches any alpha numeric character including underscore (_)
\W              Matches any non alpha numeric character excluding the underscore character
\s              Matches any single whitespace character

ブラケット

ブラケット[]は、正規表現のコンテキストで使用される場合、特別な意味を持ちます。これらは、文字の範囲を検索するために使用されます。

[0-9]           Matches any decimal digit from 0 through 9.
[a-z]           Matches any character from lowercase a through lowercase z.
[A-Z]           Matches any character from uppercase A through uppercase Z.
[a-Z]           Matches any character from lowercase a through uppercase Z.

演算子を適切に使用する方法を見てみましょう。単語の例でこれを行いますhello

/hello/       Matches the word hello
/^hello/      Matches hello at the start of a string. Possible matches are hello or helloworld, but not worldhello
/hello$/      Matches hello at the end of a string or line.
/he.o/        Matches any character between he and o. Possible matches are helo or heyo, but not hello
/he?llo/      Matches either hllo or hello
/hello+/      Matches hello one or more times. E.g. matches hello or hellohello
/he*llo/      Matches llo, hello or hehello, but not hellooo
/hello|world/ Matches either hello or world
/(A-Z)/       Using the hyphen character to denote a range, matches every uppercase character from A to Z. E.g. A, B, C…
/[abc]/       Matches any single character a, b or c
/abc{1}/      Matches precisely one c character after the characters ab. E.g. matches abc, but not abcc
/abc{1,}/     Matches one or more c character after the characters ab. E.g. matches abc or abcc
/abc{2,4}/    Matches between two and four c character after the characters ab. E.g. matches abcc, abccc or abcccc, but not abc

最も一般的な

[^a-zA-Z]       Matches any string not containing any of the characters ranging from a through z and A through Z.
p.p             Matches any string containing p, followed by any character, in turn followed by another p.
^.{2}$          Matches any string containing exactly two characters.
<b>(.*)</b>     Matches any string enclosed within <b> and </b>.
p(hp)*          Matches any string containing a p followed by zero or more instances of the sequence hp.

URL に一致する正規表現

まず、URL がどのように構築されるかを見てみましょう。いくつかのオプションしかありません。

  • http://example.com/
  • https://example.com/
  • ftp://example.com/
  • www.example.com
  • user@example.com
  • 127.0.0.1
  • http://example.com:8080/

http://、、、、、、および。https://_ ftp_ www_ mail_ipport

方法1(1/10ポイント)

// Only mails
$match = preg_match('/[^\x00-\x20()<>@,;:\\".[\]\x7f-\xff]+(?:\.[^\x00-\x20()<>@,;:\\".[\]\x7f-\xff]+)*\@[^\x00-\x20()<>@,;:\\".[\]\x7f-\xff]+(?:\.[^\x00-\x20()<>@,;:\\".[\]\x7f-\xff]+)+/', $string, $array);

方法 2 (5/10 ポイント)

// Without ports, www-s, ip-s and mails
$text = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]","<a href=\"\\0\">\\0</a>", $text);

方法 3 (10/10 ポイント)

/* Proposed by:
 * Søren Løvborg
 * http://stackoverflow.com/users/136796/soren-lovborg
 */

$rexProtocol = '(https?://)?';
$rexDomain   = '((?:[-a-zA-Z0-9]{1,63}\.)+[-a-zA-Z0-9]{2,63}|(?:[0-9]{1,3}\.){3}[0-9]{1,3})';
$rexPort     = '(:[0-9]{1,5})?';
$rexPath     = '(/[!$-/0-9:;=@_\':;!a-zA-Z\x7f-\xff]*?)?';
$rexQuery    = '(\?[!$-/0-9:;=@_\':;!a-zA-Z\x7f-\xff]+?)?';
$rexFragment = '(#[!$-/0-9:;=@_\':;!a-zA-Z\x7f-\xff]+?)?';

function callback($match)
{
    // Prepend http:// if no protocol specified
    $completeUrl = $match[1] ? $match[0] : "http://{$match[0]}";

    return '<a href="' . $completeUrl . '">'
        . $match[2] . $match[3] . $match[4] . '</a>';
}

$text = preg_replace_callback("&\\b$rexProtocol$rexDomain$rexPort$rexPath$rexQuery$rexFragment(?=[?.!,;:\"]?(\s|$))&",
'callback', htmlspecialchars($text));

あなたは私の答えにあなた自身の考えを書くことができます.


書いています...

于 2013-07-27T16:28:44.107 に答える