- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个包含多行文本的文件,我只想匹配那些包含多个单词的行。 所有单词都必须出现在行中,但它们可以以任何顺序出现。
所以如果我们想匹配一个、两个、三个,下面的前两行将被匹配:
three one four two <-- match
four two one three <-- match
one two four five
three three three
这可以使用 QRegExp 来完成吗(不拆分文本并为每个单词单独测试每一行)?
最佳答案
是的,这是可能的。使用lookahead .这将检查主题字符串的以下部分,而不实际使用它们。这意味着在先行完成后,正则表达式引擎将跳回到它开始的地方,您可以运行另一个先行(当然在这种情况下,您从字符串的开头使用它)。试试这个:
^(?=[^\r\n]*one)(?=[^\r\n]*two)(?=[^\r\n]*three)[^\r\n]*$
取反字符类 [^\r\n]
确保我们永远不会越过行尾。因为前瞻实际上并不为匹配消耗任何东西,所以我们在末尾(前瞻之后)添加 [^\r\n]*
并为匹配添加 $
队伍的尽头。事实上,由于 *
的贪婪性,您可以省略 $
,但我认为这会使表达式的含义更加明显。
确保在多行模式下使用此正则表达式(以便 ^
和 $
匹配行的开头)。
编辑:
抱歉,显然是 QRegExp does not support multi-line mode m
:
QRegExp does not have an equivalent to Perl's /m option, but this can be emulated in various ways for example by splitting the input into lines or by looping with a regexp that searches for newlines.
它甚至建议将字符串拆分成行,这是您要避免的。
由于 QRegExp 也不支持 lookbehinds(这将有助于模拟 m
),其他解决方案就有点棘手了。你可以去
(?:^|\r|\n)(?=[^\r\n]*one)(?=[^\r\n]*two)(?=[^\r\n]*three)([^\r\n]*)
那么你想要的行应该在捕获组 1
中。但我认为将字符串拆分为多行可能会产生比这更具可读性的代码。
关于c++ - QRegExp 一次匹配包含 N 个单词的行,但不考虑顺序(即逻辑与),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13690571/
在我正在进行的项目中,我需要制作一个 QStringList在所有 QRegExp 中捕获其中 2 个的 except:第一个和另一个,取决于其他一些参数。 直接的方法是使用 QRegExp::cap
我对 QRegExp 类没有任何问题,但现在我有了一个。我的代码 QRegExp re("d class=\\.green\\.>([+,0-9]+)[.0-9]+[.0-9]++0.1069.769
我必须从qmake 项目文件中提取单行注释。规则很简单:注释以 # 符号开头,以换行符 \n 开头。所以我阅读了一些关于 QRegExp 的文档,并编写了这样的代码来打印 qmake 文件中的所有注释
我试图在回调函数中将字符串与 QRegExp 匹配。我正在使用 Qt 的 C++ 实现。我写了一个形式的正则表达式:Atmospheres.(\\d+).(latitude|longitude|rad
我正在开发一些 Qt 应用程序,其主窗口 由QPlainTextEdit 子类日志窗口 组成,用于输出事件。我有三种类型的消息: 信息消息,表示一个以[INFO]子串开头的QString 警告信息,表
我想将所有不包含这些字符“”、“=”的字符串与 QRegExp (Qt) 匹配。使用以下正则表达式,这是行不通的: "^[^>、=]).*$ 关于c++ - QRegExp 不符合预期,我们在Sta
我正在尝试使用正则表达式解析这些字符串,但我认为我的正则表达式语句不正确。 我得到一个字符串,每当它有换行符和回车符时,它们必须分成两个字符串。字符串具有以下格式 [CharSize][Inverte
我有一个由其他人制作的应用程序,我需要修复它。 View 上有一个图表和一个用于过滤图表的文本框,但过滤器不起作用。出于某种原因,QRegExp 找不到任何东西。 我正在使用 QT5.12.1 和 V
使用 Qt 框架的类,我们如何从字符串中删除换行符、回车符和多个空格。 输入: A quick fox run over the lazy dog 输出: A quick fox
我正在努力创建一个用于匹配字符串 (??) 的 QRegExp(即:一个左括号、两个问号和一个右括号,这应该是一个单独的词,所以在此之前和之后可以是空格、制表符、换行符),我想到的最接近的是 QReg
我正在尝试从此文本中提取“246”: Responsible: John Doe Number: 246 Date: 24-12-2005 使用 QRegExp,模式: (?:Number: )\d+
我正在解析一些字符串。如果我遇到类似“Foo(bar)”的东西,我想提取“Foo”和“bar” 如何使用 QRegExp 来实现? 最佳答案 首先,如果您使用的是 Qt 5,那么最好使用 QRegul
我有一个 QString“mystring”,它是从这个 shell 命令的返回值中捕获的: df /storage/sdcard0/ 捕获的字符串是: Filesystem
我有一个字符串。例如: QString myString = "Today is Tuesday"; 要求是:当用户键入一个字符串时,如果该字符串包含在myString中,那么myString中的那部
我正在为 QLineEdit 编写一个正则表达式检查器,我正在使用 QRegExp。 我已经写了一个 int 值检查器: QRegExp *expression_ = new QRegExp("^(0
我想像使用 QRegExp 一样过滤命令 /path/to/executable --long-parameter -s /path/which/has/a/space/and/a/dash/\ -e
我不知道如何使用 QRegExp。我正在尝试从 QString 中删除选定的字符,但不知道如何将其写为正则表达式,从未使用过这些字符 :( 我想删除所有换行符、回车符、|、¦、¶ 和 §。 谢谢 Ps
我的程序从命令行获取配置。命令行是这样的:“mapPath=Some_Path_Over_Here\npluginsPath=Other_Path_Over_Here\n”请注意中间和最后的“\n”。
我想知道/有一个 qregexp,它可以从一行中提取所有整数,但如果数字位于评论部分则停止提取 For Example { 20,100,0X0},/*this line contains 2
我需要验证在 qlineedit 中输入的文本是否具有正则表达式的形式,我尝试使用这个: void MainWindow::checkReg( QLineEdit& mail, const QChec
我是一名优秀的程序员,十分优秀!