gpt4 book ai didi

java - 尝试简化复杂的正则表达式

转载 作者:太空宇宙 更新时间:2023-11-04 07:17:29 25 4
gpt4 key购买 nike

例如,以下正则表达式尝试考虑所有可能的、有效的非军事时间间隔。如:“04-12:15”、“12:30-9”、“3:10-4:57”,但不会匹配以下内容:

"<td class="text">2013-11-04</td>" .

正则表达式(来自另一个类似的问题,归功于 @MikeClark 的正则表达式):

regex = "(?<!\\d|-|:)((?:0?[1-9]|1[0-2])(?::[0-5][0-9])?-
(?:0?[1-9]|1[0-2])(?::[0-5][0-9])?)(?!\\d|-|:)"

这是正则表达式的解释:

(?<!\\d|-|:)数字、连字符或冒号的负向后查找
(?:0?[1-9]|1[0-2])所有有效时间的帐户
(?::[0-5][0-9])所有有效分钟数的帐户
(?!\\d|-|:)数字、连字符或冒号的负向预测

希望其余部分是不言自明的。这可行,但相当冗长。理论上,这可以简化为:
令 EXP = (?:0?[1-9]|1[0-2])(?:[0-5][0-9])?

"(?<!\\d|-|:)((?:0?[1-9]|1[0-2])(?::[0-5][0-9])?-EXP)(?!\\d|-|:)";

所以我的问题是:

(1):有没有办法引用正则表达式的一部分?反向引用不起作用,因为它不是我想要的表达式匹配的内容(假设它是一个捕获组),而是表达式本身。我知道可以将表达式存储在字符串中并使用 format() ,但我想看看是否可以仅在正则表达式中执行此操作。

(2):我能想到的唯一有帮助的另一件事是能够确定表达式中的重复项。如:

给定:regex = "...(?:someExpression){2}"

有没有办法确定我们是在 someExpression 的第 1st 次重复还是第 2nd 次重复中?

有关Java的答案或Perl对我来说是最好的。

感谢您的帮助!

最佳答案

有没有办法引用正则表达式的一部分?

是的,确实如此。您可以使用符号 (?1) 来重用第一个定义组。在你的情况下是:

(?<!\d|-|:)(((?:0?[1-9]|1[0-2])(?::[0-5][0-9])?)-(?2))(?!\d|-|:)

您必须再创建一个组。

关于java - 尝试简化复杂的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19780695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com