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

您可以调整正则表达式以绕过“n”后跟数字的任何组合,如下所示:

/n[^\d]/

请注意,它\d代表一个数字,语法将匹配不在字符组内的[^...]任何内容。

于 2012-05-01T03:27:57.990 回答
1

像这样使用单词边界\b和负前瞻:

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

\b将确保n与单词边界匹配,因此on1不会匹配。

于 2012-05-01T03:33:27.873 回答
0

其他 2 个响应的半组合:

/\bn\D*/
  • \b表示单词边界
  • \D表示任何非数字字符
  • *表示出现 0 次或多次(非数字字符)

编辑:感谢艾伦,这是一个更好的版本:

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