首页 > 解决方案 > 如何在 Lua 中创建仅在没有数字(普通或罗马数字)时匹配的模式?

问题描述

我想制作一个仅在字符串不包含阿拉伯数字或罗马数字时才匹配的模式(请注意,罗马数字只能达到X(10))

例子:

"Rock"                 <-- matches
"Rock IV"              <-- doesn't match
"Rock 4"               <-- doesn't match
"Rock Paper"           <-- matches
"Rock Paper Scissors"  <-- matches
"Rock Paper VIII"      <-- doesn't match
"Rock Paper 8"         <-- doesn't match

我当前的代码只允许使用 1 个单词和一个数字。我的目标是使它只有在出现数字时才不匹配。代码:

"^([^%s]+)$"

正如标题所说,我正在使用 Lua。我还可以注意到,该代码将用于其中一个同人维基,因此语法应与Scribunto语法匹配。

标签: lualua-patternsscribunto

解决方案


我想不出任何一种模式可以一次性匹配您需要的任何可能的单词。

".*%s?[^IVXLCDM0-9]+$"

这匹配任何不以空格和数字结尾的字符串。

对于像“RockM”这样带有罗马数字的单词,这将失败。

通常更容易匹配不匹配的东西。

如果您只想检查它可能更容易搜索字符串[0-9IVXLCDM]


推荐阅读