【发布时间】:2018-08-06 12:59:59
【问题描述】:
我有一个枚举,我将其用作程序的固定参数值,并使用正则表达式来清理用户输入。
我希望用户能够输入与其中一个值的部分匹配并接受该值而不是其他值。
例如,如果枚举是:
end
end now
start
swarm
condition
用户输入
s
st
sta
etc...
没关系,因为它是开始的一部分; 但是如果用户输入了
ending
它不会是好的,因为它不是任何其他词的一部分。
我知道我可以指定组中的每个排列 (s|st|sta|star|start) 并且它会完成工作,但是为大约 12 个不同的值执行此操作似乎很难维护并且“丑陋”...
有没有更简单的方法来匹配固定值或这些固定值的子值?
我不是搜索特定于一种引擎/语言的内容(例如 java 代码..)
【问题讨论】:
-
我不会只在正则表达式中这样做-无论如何您都需要将用户输入拆分为单词并根据命令检查每个单词。一些正则表达式引擎确实提供了“以”查询(如 Python 的
re.match()),在其他引擎中,您可以在正则表达式前面添加^以强制它在字符串的开头匹配,但无论如何,您需要做一些超出正则表达式本身的编程工作。 -
s(t(a(rt?)?)?)?)?会更简洁地完成您的要求。有些语言的库可以为您执行此操作,但几乎没有与语言无关的方式来运行该代码。 -
st?a?r?t?显然可以解决问题 -
@Vivick 确定,如果
srt有效。 -
我搜索了更优雅的东西,也许是我错过的运算符。但似乎唯一的选择是接受一些通用正则表达式的输入并在代码中添加特定的验证(作为后处理)