不确定如何检查单词是否在字符串中显示为整个单词,而不是单词的一部分,区分大小写。例如:
Play
在字符串中
Info Playlist Play pause
但不在字符串中
Info Playlist pause
Info NowPlay pause
答案 0 :(得分:6)
由于Lua中没有通常的\b
字边界,因此您可以使用frontier pattern %f
。 %f[%a]
匹配到字母的转换,%f[%A]
匹配相反的转换。
%f[set]
,前沿模式;这样的项匹配任何位置的空字符串,使得下一个字符属于set,而前一个字符不属于set。集合集如前所述进行解释。处理主题的开头和结尾就好像它们是字符\0
。
您可以使用以下ContainsWholeWord
功能:
function ContainsWholeWord(input, word)
return string.find(input, "%f[%a]" .. word .. "%f[%A]")
end
print(ContainsWholeWord("Info Playlist pause","Play") ~= nil)
print(ContainsWholeWord("Info Play List pause","Play") ~= nil)
请参阅IDEONE demo
要完全模仿\b
行为,您可以使用
"%f[%w_]" .. word .. "%f[^%w_]"
模式,因为\b
匹配:
[a-zA-Z0-9_]
)字符。[a-zA-Z0-9_]
)字符。[a-zA-Z0-9_]
),另一个不是单词字符([^a-zA-Z0-9_]
)。请注意,%w
Lua模式与\w
不同,因为它只匹配字母和数字,但不匹配下划线。
答案 1 :(得分:2)
function isWordFoundInString(w,s)
return select(2,s:gsub('^' .. w .. '%W+','')) +
select(2,s:gsub('%W+' .. w .. '$','')) +
select(2,s:gsub('^' .. w .. '$','')) +
select(2,s:gsub('%W+' .. w .. '%W+','')) > 0
end
print(isWordFoundInString('Play','Info Playlist Play pause'))
print(isWordFoundInString('Play','Info Playlist pause'))
print(isWordFoundInString('Play','Info NowPlay pause'))