gpt4 book ai didi

java - 常规信息模式

转载 作者:行者123 更新时间:2023-11-30 04:54:23 24 4
gpt4 key购买 nike

我正处于正则表达式学习的最初几天。我正在尝试进行简单的模式匹配,以在日志文件中查找 @@@XXX@@@ 标记的出现,其中 XXX 是大写单词,不允许存在空格/数字值(也允许下划线)。起始 &&& 与实际单词或单词与终止 &&& 之间不能有空格或有多个空格。 XXX 始终为大写,并且不允许有空格/数字值(允许下划线)。

一些允许的示例:@@@CAT@@@

@@@猫@@@

@@@猫@@@

@@@ CAT_DOG @@@

我尝试做类似的事情:

Pattern pattern = Pattern.compile("\\@{3}(\\s* \\w \\s*)\\@{3}");

这不是意味着检查 3 个 @ 实例,后跟 o 到 n 个空格实例,后跟一个单词,再后跟 o 到 n 个空格实例,后跟 3 个 @ 实例?它捕获带有 @@ 的情况,但不捕获使用超过 3 个 @ 的情况。如何指定 @ 的实例有 3 个且仅有 3 个? ....显然我还没有插入大写限制。

最佳答案

试试这个:

(?:[^@]|^)@{3}(\s*[A-Z_]+\s*)@{3}(?!@)

// or with Java escaping

(?:[^@]|^)@{3}(\\s*[A-Z_]+\\s*)@{3}(?!@)

放置文字空格会形成所需的空格。所以 a bab 不同。在原始模式中,\\s+\w 之间有一个空格。 \w 也同样匹配小写和大写。使用字符类只会匹配大写字母。

<小时/>

如果您想避免超过三个(正如其中一条评论所建议的那样),您必须添加一些额外的代码。

在开头我们放了这个,它表示要么匹配非@字符,要么匹配字符串^的开头。 (?:) 表示我们不关心比赛的这一部分。

(?:[^@]|^)

最后我们不得不说后面的字符不能是@。 (?!) 表示如果模式可以匹配则失败。它最终不会捕获它,因为这是一个零宽度前瞻。

(?!@)

我更新了顶部的模式。

这些新模式将不匹配。

@@@ CAT_DOG @@@@

@@@@ CAT_DOG @@@

关于java - 常规信息模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9009414/

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