0

これは私がこれまでに持っているものです:

$data = "Hello this is on1";
if (preg_match("/n/", $data)){
  $status = "it contains n";
}
if (preg_match("/n1/", $data)){
  $status1 = "it contains n1";
}
echo $status;
echo $status1;

これは、$data「n」が含まれていることを示し、$data「n1」が含まれていることを示します。私が抱えている問題は、「n」を単独で取得する方法です。次の場合にのみ「n を含む」を返す必要があり$data="Hello this contains n"ます。別の言い方をすれば、文字 "n" を数字に付けるべきではありません。

4

3 に答える 3

1

次のように単語境界\bと否定先読みを使用します。

if (preg_match("/\b(n(?!\d+)[^\b]*)/", $data)){
  $status = "it contains n";
}

\bnが単語境界と一致することを確認するため、一致しon1ません。

于 2012-05-01T03:33:27.873 に答える
1

次のように、「n」の後に数字が続く組み合わせをバイパスするように正規表現を調整できます。

/n[^\d]/

\dは数字を表し、構文は文字グループ内にない[^...]ものと一致することに注意してください。

于 2012-05-01T03:27:57.990 に答える
0

他の 2 つの応答の半組み合わせ:

/\bn\D*/
  • \b単語の境界を意味します
  • \D数字以外の任意の文字を表します
  • *(数字以外の文字の) 0 回以上の出現を示します

編集:アランのおかげで、より良いバージョンがここにあります:

/\bn[^\d\s]*\b/
于 2012-05-01T03:52:57.700 に答える