使用preg_match来获取值

时间:2012-05-01 03:21:22

标签: php regex

这是我到目前为止所做的:

$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”。 它应该仅在$data="Hello this contains n"时返回“它包含n”; 换句话说,字母“n”不应附加到任何数字上,如果它附加在其他正常的东西上。

3 个答案:

答案 0 :(得分:1)

您可以调整正则表达式以绕过“n”的任意组合,然后是这样的数字:

/n[^\d]/

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

答案 1 :(得分:1)

使用字边界\b和负面预测,如下所示:

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

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

答案 2 :(得分:0)

其他2个回复的半组合:

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

编辑:感谢Alan这里有一个更好的版本:

/\bn[^\d\s]*\b/