我尝试使用以下 regx 规则,但找不到解决方案。
抱歉,如果我没说清楚。我想要每个规则都有不同的正则表达式。我正在使用 Java。
对于以前缀“1900”或“1901”开头的所有数字输入,规则应失败。 (190011 - 失败,190111 - 失败,41900 - 成功...)
规则应该对所有带有前缀“*”的数字输入成功
每个规则都有不同的正则表达式(我不是在寻找它们两者的组合)
最佳答案
此 RE 符合目的吗? :
'\A(\*|(?!190[01])).*'
\A 表示“字符串的开头”。我认为 Java 的正则表达式也是如此
.
编辑
\A
:“从字符串的最开始......”。在Python(事实上,这是我所知道的)中,如果我们使用始终从头开始分析的函数match()
,而不是search()
,则可以省略此操作> 搜索字符串中的所有位置。如果您希望正则表达式能够从每行的开头分析行,则必须将其替换为 ^
(...|...)
:“.... 必须是以下两个选项之一:.....”
\*
: "...第一个选项只有一个字符,一颗星;..."。由于星号是特殊字符,在正则表达式的字符串中表示“零,之前的一个或多个”,因此必须对其进行转义以严格表示“星号”。
(?!190[01])
:“...第二个选项不是必须找到并可能捕获的模式,而是必须不存在的模式(仍在非常之后)开始)……”。两个字符 ?!
表示“不能有以下字符”。找不到的模式长度为 4 个整数字符,即 '1900' 或 '1901' 。
(?!.......)
是一个否定的先行断言。所有类型的断言都以 (?
开头:括号使 ?
的习惯含义无效,这就是为什么所有断言总是用括号编写。
如果 \*
匹配,则已消耗一个字符。相反,如果断言得到验证,则字符串相应的前 4 个字符尚未被消耗:正则表达式电机已遍历分析的字符串,直到第 4 个字符来验证它们,然后返回到其初始值位置,也就是说,目前在字符串的最开头。
如果您希望双可选部分 (...|...)
不成为捕获组,您将在第一个之后写入 ?:
括号,然后 '\A(?:\*|(?!190[01])).*'
.*
:在开始模式(捕获/匹配一颗星,或验证断言)之后,正则表达式电机开始捕获所有字符,直到行尾。如果字符串包含换行符,并且您希望正则表达式捕获字符串末尾之前的所有字符,而不仅仅是一行,则您将指定 .
也必须匹配换行符(在 Python 中与 re.MULTILINE 一起使用),或者将 .*
替换为 (.|\r|\n)*
我终于明白你显然想要捕获由数字字符组成的字符串。如果是这样,则必须将 RE 更改为 '\A(?:\*|(?!190[01]))\d*'
。此 RE 与空字符串匹配。如果您希望与空字符串不匹配,请将 \d+
代替 \d*
。如果您希望仅包含至少一位数字的字符串,即使在以星号开头的星号之后,也可以匹配,然后执行 '\A(?:\*|(?!190[01]))(? =\d)\d*'
关于java - 特定数字前缀的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5289045/