- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
下面我有一个相当复杂的正则表达式,似乎永远不会终止。这不仅仅是花很长时间的问题——我已经等了几分钟才得到回复,但运气不好。
下面是一些重现问题的代码:
import re
link = re.compile(u'(?i)((?:https?://|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\((?:[^\s()<>]+|(?:\([^\s()<>]+\)))*\))+(?:\((?:[^\s()<>]+|(?:\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'".,<>?\xab\xbb\u201c\u201d\u2018\u2019]))', re.IGNORECASE)
text = "Check out this link http://ru.wikipedia.org/wiki/%D0%9B%D0%BE%D0%B2%D0%B5%D1%86_%D1%81%D0%BD%D0%BE%D0%B2_(%D0%B0%D0%BC%D1%83%D0%BB%D0%B5%D1%82"
matches = re.findall(link, text)
这里是将 re.DEBUG 作为标志传递给模式的输出:
subpattern 1
subpattern None
branch
literal 104
literal 116
literal 116
literal 112
max_repeat 0 1
literal 115
literal 58
literal 47
literal 47
or
literal 119
literal 119
literal 119
max_repeat 0 3
in
category category_digit
literal 46
or
max_repeat 1 4294967295
in
range (97, 122)
range (48, 57)
literal 46
literal 45
literal 46
max_repeat 2 4
in
range (97, 122)
literal 47
max_repeat 1 4294967295
subpattern None
branch
max_repeat 1 4294967295
in
negate None
category category_space
literal 40
literal 41
literal 60
literal 62
or
literal 40
max_repeat 0 4294967295
subpattern None
branch
max_repeat 1 4294967295
in
negate None
category category_space
literal 40
literal 41
literal 60
literal 62
or
subpattern None
literal 40
max_repeat 1 4294967295
in
negate None
category category_space
literal 40
literal 41
literal 60
literal 62
literal 41
literal 41
subpattern None
branch
literal 40
max_repeat 0 4294967295
subpattern None
branch
max_repeat 1 4294967295
in
negate None
category category_space
literal 40
literal 41
literal 60
literal 62
or
subpattern None
literal 40
max_repeat 1 4294967295
in
negate None
category category_space
literal 40
literal 41
literal 60
literal 62
literal 41
literal 41
or
in
negate None
category category_space
literal 96
literal 33
literal 40
literal 41
literal 91
literal 93
literal 123
literal 125
literal 59
literal 58
literal 39
literal 34
literal 46
literal 44
literal 60
literal 62
literal 63
literal 171
literal 187
literal 8220
literal 8221
literal 8216
literal 8217
最佳答案
如果您从字符串的末尾删除 %D0%B5%D1%82
,它会起作用(尽管大约需要 10 秒)。随着字符串和匹配项的复杂性增加,检查表达式条件所需的处理量呈指数级增长,并且您的 CPU 利用率可能会一直飙升至 100%。
这叫做 catastrphic backtracking -- 在我看来你遇到了 99 到 100 个问题 ;)
CPU 被阻塞到无法继续处理表达式的程度。
解决方案:
老实说,我不知道这是否会为您减少,但由于您有很多重叠的条件,这似乎可以减少它们。最好检查一堆样本来验证:
(?i)(?:https?://|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)((?:\(?[^\s()<>]+\)?)*[^\s`!()\[\]{};:\'".,<>?\xab\xbb\u201c\u201d\u2018\u2019])
示例:http://regex101.com/r/lV0oL4
我相信您可以进一步简化它,这只是一个快速尝试。字符串处理时间:小于 100 毫秒。
关于Python re.findall() 不会终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21146406/
如果我终止应用程序,我在尝试保持我的功能运行时卡住了。 是否可以在应用程序未运行时保持核心位置(地理围栏/地理定位)和核心蓝牙运行?如果可能如何解决我的问题?我已经检查了背景模式,并实现了核心定位方法
该程序要求用户输入一个数字,然后从列表中返回详细信息。我该怎么做? do { Scanner in = new Scanner(System.in);
我正在开发一个内部分发的 iOS 应用程序(即,没有应用程序商店),我希望能够以恒定的 10 分钟间隔报告设备的位置。 无论如何,我在我的 plist 中包含了 location 作为字段 UIBac
我的 mongodb 服务器突然收到信号 15(终止)。我不知道为什么 mongodb 崩溃了。以下是日志消息。 Mon Jun 27 07:33:31.701 [signalProcessingTh
我按顺序运行了一堆malloc,并且每次都检查以确保它是成功的。像这样: typedef struct { int *aray; char *string; } mystruct; m
这个问题已经有答案了: How to stop a running pthread thread? (4 个回答) 已关闭 8 年前。 可以使用 pthread_join() 停止线程。但让我们想象一
#include #include #include struct node{ char data; int p; struct node *ptr; }; struct node *st
这个问题已经有答案了: Why should I use a semicolon after every function in javascript? (9 个回答) 已关闭 8 年前。 好吧,我问
我有一个启动多个工作线程的函数。每个工作线程都由一个对象封装,该对象的析构函数将尝试加入线程,即调用if (thrd_.joinable()) thrd_.join();。但是,每个 worker 必
我正在实现一个应用程序,当用户摇动手机时,该应用程序会监听并采取行动。 所以我实现了以下服务: public class ShakeMonitorService extends Service {
我在使用 Xcode 时遇到问题,其中弹出错误“Source Kit Service Terminated”,并且所有语法突出显示和代码完成在 Swift 中都消失了。我怎样才能解决这个问题? 这是一
我想为我的控制台应用程序安全退出,该应用程序将使用单声道在 linux 上运行,但我找不到解决方案来检测信号是否发送到它或用户是否按下了 ctrl+c。 在 Windows 上有内核函数 SetCon
关键: pthread_cancel函数发送终止信号pthread_setcancelstate函数设置终止方式pthread_testcancel函数取消线程(另一功能是:设置取消点) 1 线程取消
下面的程序在不同的选项级别下有不同的行为。当我用 -O3 编译它时,它永远不会终止。当我用 -O0 编译它时,它总是很快就会终止。 #include #include void *f(void *
我有 3 个节点的 K8S 集群,我创建了 3 个副本 pod,应用程序 app1 在所有 pod 上运行,我通过运行 service yaml 文件建立了服务,我可以看到通过运行 kubectl g
我打算使用 nginx 来代理 websocket。在执行 nginx reload/HUP 时,我知道 nginx 等待旧的工作进程停止处理所有请求。然而,在 websocket 连接中,这可能不会
在 Ubuntu 9.10 上使用 PVM 3.4.5-12(使用 apt-get 时的 PVM 包) 添加主机后程序终止。 laptop> pvm pvm> add bowtie-slave add
我编写了一个应用程序来从 iPhone 录制视频。它工作正常,但有一个大问题。当 AVCaptureSession 开始运行并且用户尝试从其库(iPod)播放音频时。此操作将使 AVCaptureSe
我将如何使用NSRunningApplication?我有与启动应用程序相反的东西: [[NSWorkspace sharedWorkspace] launchApplication:appName]
我正在使用 NSTask 执行一系列长时间运行的命令,如下所示: commandToRun = @"command 1;command2"; NSArray *arguments = [NSArray
我是一名优秀的程序员,十分优秀!