匹配单词的正则表达式,即使字母之间有空格
Regex to match a word, even is there are spaces between letters
我想要一个正则表达式来匹配一个词,即使字符之间有空格。
当我要匹配单词test
时,它应该匹配如下:
test
t est
t e s t
等等,但不应该匹配这样的东西:
tste
te ts
s tet
我有这个正则表达式:
(t[\s]*e[\s]*s[\s]*t[\s]*)
但是我不相信这个效率很高。
这是匹配此类词的唯一方法。您必须消耗这些空间,否则您将无法匹配。其实你的模式和
一样
t\s*e\s*s\s*t
如果单词出现在比较大的字符串里面,可以考虑分词版本:
\bt\s*e\s*s\s*t\b
注意:如果每个字母之间只允许有一个空格,可以使用?
量词代替*
:
t\s?e\s?s\s?t
为什么不从输入中删除所有水平空格然后匹配正则表达式:
$input = 't e s t';
$regex = '/\btest\b/i';
preg_match($regex, preg_replace('/\h+/', '', $input), $m);
我想要一个正则表达式来匹配一个词,即使字符之间有空格。
当我要匹配单词test
时,它应该匹配如下:
test
t est
t e s t
等等,但不应该匹配这样的东西:
tste
te ts
s tet
我有这个正则表达式:
(t[\s]*e[\s]*s[\s]*t[\s]*)
但是我不相信这个效率很高。
这是匹配此类词的唯一方法。您必须消耗这些空间,否则您将无法匹配。其实你的模式和
一样t\s*e\s*s\s*t
如果单词出现在比较大的字符串里面,可以考虑分词版本:
\bt\s*e\s*s\s*t\b
注意:如果每个字母之间只允许有一个空格,可以使用?
量词代替*
:
t\s?e\s?s\s?t
为什么不从输入中删除所有水平空格然后匹配正则表达式:
$input = 't e s t';
$regex = '/\btest\b/i';
preg_match($regex, preg_replace('/\h+/', '', $input), $m);