在 Lua 中仅使用正则表达式替换整个单词
Substituting whole words only using Regex in Lua
我正在制作一个可以正确解决用户性别问题的程序。所以它应该将 he
的每个实例替换为 she
,反之亦然。
问题是这也会替换 he
里面的单词,例如 them
、their
、help
...
这就是我卡住的地方。
local str = "the he he's hell"
str = str:gsub("he", "she") --tried my best, not the correct solution!
print(str) --expecting "the she she's hell"
基本上把he
全部替换成she
.
一种可行的双向解决方案:
str = str:gsub("%a+", {he = "she", she = "he"})
%a+
匹配一个或多个基本上是单词的字母。该匹配项被相应的 table 条目替换或保持不变。
还有其他方法可以做到这一点,但这可能是实现双向解决方案的最短方法。
编辑:
About the second param. I couldn't find any documentation about this.
Do you have any?
不确定您在哪里寻找文档,但 Lua Manual 说:
string.gsub (s, pattern, repl [, n])
...
If repl is a table, then the table is queried for every match, using
the first capture as the key.
我正在制作一个可以正确解决用户性别问题的程序。所以它应该将 he
的每个实例替换为 she
,反之亦然。
问题是这也会替换 he
里面的单词,例如 them
、their
、help
...
这就是我卡住的地方。
local str = "the he he's hell"
str = str:gsub("he", "she") --tried my best, not the correct solution!
print(str) --expecting "the she she's hell"
基本上把he
全部替换成she
.
一种可行的双向解决方案:
str = str:gsub("%a+", {he = "she", she = "he"})
%a+
匹配一个或多个基本上是单词的字母。该匹配项被相应的 table 条目替换或保持不变。
还有其他方法可以做到这一点,但这可能是实现双向解决方案的最短方法。
编辑:
About the second param. I couldn't find any documentation about this. Do you have any?
不确定您在哪里寻找文档,但 Lua Manual 说:
string.gsub (s, pattern, repl [, n])
...
If repl is a table, then the table is queried for every match, using the first capture as the key.