这对于正则表达式魔术师来说可能很容易,但是我似乎无法通过我有限的知识找到方法。
我需要一个正则表达式,用于检查字母数字字符串是否包含小于数字的数字(在我的情况下为16539065)。
例如,应匹配以下内容:
alpha16000000beta foo300bar
以下内容不应匹配:
foo16539066bar
请帮助。
编辑:我知道它效率低下,但是我在cPanel帐户级别过滤器中执行此操作,该过滤器只接受正则表达式。除非我找到一种方法来触发脚本,否则这肯定需要用正则表达式来完成。 :(答案 0 :(得分:1)
此类操作的最佳选择是使用捕获组获取数字,然后使用您使用的任何语言进行比较。如果你绝对必须使用正则表达式来做这件事,那将是非常低效的。为此,您需要结合许多类似的表达式:
获得所有这些表达后,可以使用'或'组合它们。运营商。请记住,以这种方式使用正则表达式被认为是不好的做法,并且会产生难以阅读的代码。
答案 1 :(得分:0)
Bad Karma可能会杀了我,但这是一个适用于你的案件的工作解决方案(字母然后数字然后字母)。它不适用于例如ab12cd34de
。
没有什么方法可以对任何东西进行短代码处理,只有很长的路要走。我使用负向前瞻来检查,数字不大于或等于16539065。
^\D*(?!0*(?:\d{9}|2\d{7}|1[7-9]\d{6}|16[6-9]\d{5}|165[4-9]\d{4}|16539[1-9]\d{2}|165390[7-9]\d|1653906[5-9]))\d+\D*$
检查一般格式^\D*\d+\D*$
,然后将16539065滚动到它的部分。
这是一个可以玩的小演示:https://regex101.com/r/aV6yQ9/1