- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我可以在多线程中安全地使用 Qt QRegularExpression
而无需锁定吗? regex 对象将声明为全局 const
,我将仅使用 const
成员函数。
最佳答案
QRegularExpression
的单个显式共享实例不保证是线程安全的。如果你调用它的只是 const
成员函数,你可能没问题,但不能保证。唯一记录在案的保证是两个不同的实例可以在两个不同的线程中使用而无需锁定,即在实例之间隐式共享的任何数据都是内部同步的。
但是,QRegularExpression
是 Qt 的 implicitly shared classes 之一,这意味着复制 QRegularExpression
的实例非常便宜,因为拷贝将共享原始数据,只有实例被修改(写时复制)。和 shared data itself is thread-safe .
所以真正安全(和高效)的方法是在每个线程中制作全局 QRegularExpression
的本地拷贝:
QRegularExpression globalRegex("[A-Za-z_][A-Za-z0-9_]*");
void thread1() {
auto localRegex = globalRegex;
// do something with localRegex
}
void thread2() {
auto localRegex = globalRegex;
// do something with localRegex
}
共享数据将被复制的唯一情况是,如果要修改其中一个本地正则表达式对象,在这种情况下,单个全局正则表达式对象无论如何都不是线程安全的。如果您真的想要在线程之间共享一个全局 QRegularExpression
对象,那么建议使用锁。
关于c++ - QRegularExpression匹配线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25581696/
这是我的字符串:“我喜欢正则表达式,但我并不真正理解正则表达式。该死的正则表达式!” 我理解正则表达式的方式(肯定是错误的方式),如果我用“i.*regex”捕获文本。对我来说,有 5 场比赛: 1
我可以找到以前的匹配项,但我不能做的是捕获匹配字符串的长度: int pos = 0; if((pos = text.lastIndexOf(QRegularExpression(pattern),
我有一个 QString,我想在 QString 中计算 2 个东西: a) 特殊字符数 b) 连续2个字符的个数 对于第一个,我尝试了这个: QRegularExpression var1("[$&
例如,我有一个 QString,稍后我会搜索数学。如何检索匹配项在源字符串中的位置? QString str = ...; QRegularExpression re(...); int pos =
这个问题是这个问题的扩展: How to replace QRegExp in a string? 在那个问题中,问题就解决了。但是现在我需要使用 QRegularExpression 而不是 QRe
我有一个如下的字符串: on prepareFrame go to frame 10 goToNetPage "http://www.apple.com" goToNetPage
我正在尝试使用 QRegularExpression 获取不同捕获组中 xml 标记的所有属性。我使用匹配标签的正则表达式,我设法获得包含属性值的捕获组,但使用量词,我只得到最后一个。 我使用这个正则
我目前正在尝试提取以下十进制数: 2453.6756667756 来自以下句子: ID: 1 x: 1202 y: 2453.6756667756 w: 242 我正在使用这段代码: regularE
我目前正在尝试提取以下句子: This is a rectangle. Its height is 193, its width is 193 and the word number is 12. 来
粗略查看 QRegexp 的文档显示它支持反向引用,而 QRegularExpression没有提到它。这是值得注意的,因为没有反向引用的正则表达式匹配可以按线性时间缩放,而包含反向引用则按指数时间缩
QRegularExpression 是否在其正则表达式引擎中提供先行断言?我已经测试了这个例子,但没有找到匹配的字符串。 QString s = "px1 pt 2px 3em 4px"; QReg
我正在尝试使用 QRegularExpression 获取所有以“#”开头的单行注释。我使用 globalMatch 和迭代器,但它无法找到“嵌套评论”。 我使用这个正则表达式:#[^\n]* 并使用
我提取了以下句子: Very important point. It should be discussed in our next meeting. 来自以下行: ID: 1 x: 1202 y:
我搜索了(难以置信的时间)Qt 文档和其他一些在线文档,但找不到答案。 我正在使用一个 QLineEdit,它将采用“C++ 类名”(这意味着它应该只接受 [a-b](addRow("Class Na
我正在编写一个使用 QRegularExpression 和 MultilineOption 的程序,我编写了这段代码,但匹配停止在第一行。为什么?我哪里做错了? QString recv = "AU
我想使用正则表达式从 QString (.html) 中提取信息。我明确想使用正则表达式(无解析器解决方案)和类 QRegularExpression (出于多种原因,例如:Reasons)。 为了简
我看到有一个新的正则表达式类 - QRegularExpression。它只是 QRegExp 的 typedef,还是一个新类,还是什么?为什么我们需要它,我们已经有了 QRegExp? 最佳答案
我正在使用 QLineEdit 接受用户全名的输入,我想接受 所有国际字符 例如法语中的“é”或挪威语中的“æ”、“ø”和“å”,同时使用QRegularExpressionValidator 确保名
我试图让一些文字被 包围标签。我的问题是我只能获取第一个结果,而不能获取其他结果。 从以下 HTML 中,我只得到第一个结果,即此文本: Student Name 但是所有其他捕获所需文本其余部分的
采用以下正则表达式: (?<=(<|<)ref) 这将使 QRegularExpression::isValid(); 失败并且 QRegularExpression::errorString(
我是一名优秀的程序员,十分优秀!