java - 特定数字前缀的正则表达式

标签 java regex

我尝试使用以下 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/

相关文章:

正则表达式查找 XXX(如果存在)但如果 Y 也存在则查找不到

php - Preg_Replace YouTube URL(带有或不带有开始时间变量)

javascript - 删除最后输入的 JavaScript 值

Java - 根据多个值过滤列表

java - 如何使用 MyBatis (Java) 在 postgres 中设置 INSERT 查询的超时

java - 不显示数据库中的 ID

java - Guice MapBinder : How to bind map<String, Hashset> 在Guice 中使用providesIntoSet?

java - java中的超时锁

javascript - 查找倒数范围的函数式方法

java - 打嗝中的正则表达式