c++ - QRegularExpression 如何使用多行模式?
问题描述
Qt 5.12.0
我正在使用从 QSyntaxHighlighter 派生的类来突出显示 QTextEdit 小部件中的文本。我已经覆盖了该highlightBlock(const QString & text)
函数,并且正在尝试使用 QRegularExpression 制作多行正则表达式模式。
QTextCharFormat format;
format.setForeground(QColor(0xFF, 0x00, 0x00));
auto opt = QRegularExpression::MultilineOption;
auto regex = QRegularExpression("a(.|\\n)*a", opt);
QRegularExpressionMatchIterator it = regex.globalMatch(text);
while (it.hasNext())
{
QRegularExpressionMatch match = it.next();
setFormat(match.capturedStart(), match.capturedLength(), format);
}
这匹配任何以字母开头和结尾的字符串a
,但仅在一行中。我尝试了几种变体,包括:
auto opt = QRegularExpression::DotMatchesEverythingOption | QRegularExpression::MultilineOption;
auto regex = QRegularExpression("a.*a", opt);
...
auto opt = QRegularExpression::MultilineOption;
auto regex = QRegularExpression("(?m)a(.|\\r|\\n)*a", opt);
...
auto opt = QRegularExpression::NoPatternOption;
auto regex = QRegularExpression("(?m)a(.|\\r|\\n)*a", opt);
这些都不起作用。多行正则表达式是否刚刚在 Qt 中被破坏,或者我做错了什么?
解决方案
推荐阅读
- windows - Perl 无法在 Windows 10 中找到现有目录
- python-3.x - ID 为 [ApiGatewayLambdaS3Event] 的资源无效。未为 S3 类型的资源定义属性 BucketName
- python - fbprophet 中的 freq='M' 和 freq='D' 有什么区别?
- python - 有什么方法可以添加我被假禁止的人的标签吗?
- c# - JWT:如何从声明中的特定键获取值列表。C# Asp.Net 核心
- c# - 使用 JSON 后关闭文件
- angular - ComponentHarness (@angular/cdk/testing) - 如何等待一定数量的元素存在
- azure-web-app-service - SignalR 最大连接数
- sql-server - Powershell 和 Excel - 数据表速度慢,行数过多
- google-bigquery - 如何将大查询 event_timestamps 转换为 PST?