gpt4 book ai didi

java - 后视很慢

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

我正在尝试使用 java regex 恢复两个位置

第一个由正则表达式给出:

val r="""(?=(?<=[ ]|^)[^ ]{1,21474836}(?=[ ]|$)(?<=[^A-Z]|^)[A-Z]{1,21474836}(?=[^A-Z]|$))"""

第二个由正则表达式给出

val p="""(?<=(?<=[ ]|^)[^ ]{1,21474836}(?=[ ]|$)(?<=[^A-Z]|^)[A-Z]{1,21474836}(?=[^A-Z]|$))"""

请注意,这两个表达式是相同的,除了第一个“=”在第二个表达式中被“<=”替换。我是 not using neste quantifiers

我的测试命令如下:

r.findAllMatchIn("a <b/>"*100) //.... some long string of size 600...
p.findAllMatchIn("a <b/>"*100) //.... some long string of size 600...

第一个示例在执行过程中几乎是即时的,而第二个示例需要几十秒。如果我在 REPL 中启动相同的示例,两者都非常快。

这是从哪里来的?我怎样才能使第二个表达式更快?

更新:为什么这很重要

请注意,一般来说,我可以有以下类型的表达式:

[^ ]+[^.]+

而且我想知道什么时候可以在给定位置的左边找到这个正则表达式,或者什么时候可以结束。如果我有以下数据及其下方的位置:

abc145A
0123456

我希望前面表达式的末尾匹配位置 1、2、3、4、5 和 6。如果我使用非贪婪的重复百搭,那么它将匹配 1、3 和 5。如果我使用贪婪的运算符,它只匹配 6 个。这就是为什么我需要回顾断言。或者你会给我找到一种方法来定义运算符来找到我正在寻找的位置。

最佳答案

您没有使用嵌套量词,但我怀疑嵌套后视会导致类似的问题。我怀疑您根本不需要外部前瞻/后视——仅使用正则表达式的内部部分(两者通用)执行单个正则表达式搜索,并从每个结果中检索开始位置和结束位置如何?

关于java - 后视很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22305186/

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