这是我到目前为止所做的:
$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”不应附加到任何数字上,如果它附加在其他正常的东西上。
答案 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/