3

Regexp(TuxRadar) に関する PHP のオンライン リソースを読む。著者によると、以下は「aaa1」をパターンに一致させるべきではないため、false(0) を返しますが、true(1) を取得します。

<?php

$str = "aaa1";
print preg_match("/[a-z]+[0-9]?[a-z]{1}/", $str);

?>

なんで?

正規表現

4

3 に答える 3

7

そこに末尾があるはずがないと確信しています$か?それがなければ、 true を返すことは非常に理にかなっています。最初の[a-z]ブロックは最初の 2a文字に[0-9]一致し、 は何も一致せず、最後のブロック[a-z]は 3 番目に一致しaます。末尾1は無視されます。

本へのリンクを見ると、そこにエラーがあるようです:

小文字で終わる必要があります

これは、正規表現が文字列の末尾に$.

于 2012-04-18T22:56:45.433 に答える
3

[0-9]?数字が 0回または 1 回一致するため、一致します。

<?php
$str = "aaa1";
print preg_match("/[a-z]+[0-9]+[a-z]{1}/", $str);
?>

試合にはなりません。

于 2012-04-18T22:56:45.463 に答える
2

正規表現を分解しましょう

  1. [az]+ は、a、aa、または aaa に一致する 1 つ以上の文字を意味します。
  2. [0-9]? オプションを意味します-数字に一致する可能性があります
  3. [az] は文字に一致することを意味します。

したがって、[0-9] はオプションであるため、1 は aa に一致し、2 は何も一致せず、3 は a に一致します。

于 2012-04-18T22:59:23.653 に答える