Php regex模式仅匹配不带';不包含空格

Php regex模式仅匹配不带';不包含空格,php,regex,Php,Regex,我想匹配变量中包含的单词/模式,但只匹配没有空格的单词。请提出建议 $var='look' $array=('look','greatlook', “好看”、“好看”、“不好看”, “脸色不好”、“脸色”、“脸色”) 匹配单词:look,greatlook,lookgreat,badlook 非匹配项:look great、bad look、look(尾随空格)、look(空格) 下面函数的语法是可以的,但它与所有函数都匹配 $match=preg_grep(“/$var/”,$array) $

我想匹配变量中包含的单词/模式,但只匹配没有空格的单词。请提出建议

$var='look'

$array=('look','greatlook', “好看”、“好看”、“不好看”, “脸色不好”、“脸色”、“脸色”)

匹配单词:look,greatlook,lookgreat,badlook

非匹配项:look great、bad look、look(尾随空格)、look(空格)

下面函数的语法是可以的,但它与所有函数都匹配

$match=preg_grep(“/$var/”,$array)

$match=preg_grep(“/^$var/”, 美元阵列);(将单词与开头的“look”匹配)

但是当我包含[^\s]时,它会给出一个错误

$match=preg_grep(“/$var[^\s]/”,$array)

分析错误:语法错误,意外的“^”,应为T_字符串或T_变量

TIA使用:

$match = preg_grep("/^\S*$var\S*$/", $array);
我认为您需要将变量括在花括号中,因为字符不带空格继续运行。

正则表达式将是
^(?=.*look)[^\s]+$

preg_match("/^(?=.*{$var})[^\\s]+$/", $str);

<?
  $str = array('look', 'greatlook', 'lookgreat', 'look great', 'badlook', 'look bad', 'look ', ' look');
  $var = "look";
  $matches = preg_grep("/^(?=.*{$var})[^\\s]+$/", $str);
  print_r ($matches);
?>
//output
Array
(
    [0] => look
    [1] => greatlook
    [2] => lookgreat
    [4] => badlook
)
preg_match(“/^(?=.*{$var})[^\\s]+$/”,$str);
//输出
排列
(
[0]=>看
[1] =>greatlook
[2] =>看起来很棒
[4] =>不好看
)

这意味着下一个字符不是空白。“looka”仍然匹配。另外,以$var结尾的单词(包括look)没有,因为没有下一个字符。谢谢,但这不起作用,花括号会改变模式。如果您的单词可能包含标点符号,请确保通过
preg\u quote
运行
$var
。那么
look greatlook
呢?“这是一场比赛吗?”Polygene说。不,我不希望在匹配的值+1中有空格,用于询问带有您希望匹配或拒绝的字符串列表的正则表达式问题。谢谢,但这不起作用,[^\\s]中的额外\给出了一个错误,即使没有额外的斜杠,正则表达式仍然会导致多个错误,主要是由于改变了$var模式的结构。@jamex如何处理
“^(?=.*look)[^\\s]+$”
也不起作用,“preg\u grep()[function.preg grep]:未知的修饰符“\'in”。即使其中一个\被删除,它仍然显示相同的错误。感谢您的努力,很抱歉我没有发现错误。我不熟悉语法,而且已经很晚了。非常感谢,这很有效。我还删除了表达式前面的\S*,以强制仅以“look”作为起始字符进行匹配。你能解释一下$前面的\是用来做什么的吗?我没有搜索,但我不认为\是$(字符串结尾)的要求。@Jamex,实际上,它在这里起作用。我担心
$
会被解释为一个PHP变量。事实上,您最初的解决方案对我很有效,“/^\S*$var\S*$/”。我只是出于另一个目的删除了表达式的起始部分。对不起,答复不清楚,已经晚了。
preg_match("/^(?=.*{$var})[^\\s]+$/", $str);

<?
  $str = array('look', 'greatlook', 'lookgreat', 'look great', 'badlook', 'look bad', 'look ', ' look');
  $var = "look";
  $matches = preg_grep("/^(?=.*{$var})[^\\s]+$/", $str);
  print_r ($matches);
?>
//output
Array
(
    [0] => look
    [1] => greatlook
    [2] => lookgreat
    [4] => badlook
)