not sure how to check if a word appears as a whole word in a string, not part of a word, case sensitive. for example:
Play
is in strings
Info Playlist Play pause
but not in the strings
Info Playlist pause
Info NowPlay pause
Since there is no usual \b
word boundary in Lua, you can make use of a frontier pattern %f
. %f[%a]
matches a transition to a letter and %f[%A]
matches the opposite transition.
%f[set]
, a frontier pattern; such item matches an empty string at any position such that the next character belongs to set and the previous character does not belong to set. The set set is interpreted as previously described. The beginning and the end of the subject are handled as if they were the character\0
.
You can use the following ContainsWholeWord
function:
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)
See IDEONE demo
To fully emulate \b
behavior, you may use
"%f[%w_]" .. word .. "%f[^%w_]"
pattern, as \b
matches the positions between:
[a-zA-Z0-9_]
) character.[a-zA-Z0-9_]
) character.[a-zA-Z0-9_]
) and the other is not a word character ([^a-zA-Z0-9_]
).Note that %w
Lua pattern is not the same as \w
since it only matches letters and digits, but not an underscore.
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'))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With