String 如何检查一个单词在Lua中是否作为整个单词出现在字符串中
不确定如何检查一个单词是否作为整个单词出现在字符串中,而不是单词的一部分,区分大小写。例如:String 如何检查一个单词在Lua中是否作为整个单词出现在字符串中,string,lua,string-matching,lua-patterns,String,Lua,String Matching,Lua Patterns,不确定如何检查一个单词是否作为整个单词出现在字符串中,而不是单词的一部分,区分大小写。例如: 播放在字符串中 Info Playlist Play pause 但不是在字符串中 Info Playlist pause Info NowPlay pause 由于Lua中没有常见的\b单词边界,因此可以使用%f%f[%a]匹配到字母的转换,%f[%a]匹配到相反的转换 %f[set],一种前沿模式;该项在任何位置匹配空字符串,以便下一个字符属于集合,而上一个字符不属于集合。该集合如前所述进行解释
播放
在字符串中
Info Playlist Play pause
但不是在字符串中
Info Playlist pause
Info NowPlay pause
由于Lua中没有常见的
\b
单词边界,因此可以使用%f
<代码>%f[%a]匹配到字母的转换,%f[%a]
匹配到相反的转换
%f[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)
看
要完全模拟\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
不同,因为它只匹配字母和数字,而不匹配下划线。为什么不在信息播放列表暂停中?
?这就是目标。我只希望当“Play”是一个字符串中的一个完整单词,而不是一个单词的一部分时,它才是真的。@Stribizev我看不出这是你标记它的问题的副本-这个问题是关于匹配单词边界的。实际上我甚至不想将它标记为副本,对不起,我只是想显示这个链接。谢谢,但我刚刚意识到问题应该区分大小写,而不是不区分大小写
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'))