我如何写一个Qt正则表达式来突出显示字符串开始和结束与非单词字符
How do I write a Qt regular expression to highlight strings starting and ending with non-word characters?
Windows 7 SP1
2010 msv
Qt 4.8.4
我想突出显示任何以1个或多个连字符开头和/或以1个或多个连字符结尾的字符串(不是单词)。字符串可能包含Unicode,所以我需要处理字符集。
例如,这些应该突出显示(但不包括周围的空白):
-word --word -&#$$ --&#$$
word- word-- &a$$- &a$$--
-word- --word-- -&a$$- --&a$$--
-word-word- --word--word--
没有外部连字符的内嵌连字符字符串不应高亮显示:
word-word word--word &#$$-&#$$ &#$$--&#$$
连字符不应该突出显示:
------- ---- -- ----
:
1. QRegExp("-+[\S]+|[\S]+-+")
选择我想要突出显示的所有内容(不突出显示周围的空白),但也选择我不想突出显示的内容:连字符字符串和嵌入的连字符字符串的第一部分(下划线):
word-word
-----
我相信这不会选择连字符字符串:
2. QRegExp("-+[\S]-[-]]+|[\S-[-]]+-+")
但我不知道Qt是否支持字符类减法;此表达式没有选择任何内容。
所以,我的想法是创建单独的规则,随后取消突出显示这些字符串。
选择连字符字符串(然后取消高亮显示):
3. QRegExp("[\s-+(?=\s)|\s-+$|^-+(?=\s)|^-+$"")
我被困在如何处理嵌入的连字符字符串。我认为向后看断言会有帮助,但是它们不被支持。
我的问题: a)是否有一种简单的方法来选择嵌入的连字符字符串的第一部分,这样我就可以取消突出显示而不选择其他任何东西(没有其他副作用)?或者b)最好的情况是,在表达式1中是否有更好的方法来实现这一点。实现我所有的目标而又不突出吗?
如果要匹配一个或多个-
,然后至少一个非空格非连字符,然后再匹配一个或多个-
,则使用QRegExp("-+[^-\s]+-+")
代替QRegExp("-+[\S]+|[\S]+-+")
。
S
匹配任何非空格字符,包括连字符,这使得只有连字符的序列有效,因为---
有一个连字符匹配第一个-+
,一个连字符匹配S+
,另一个连字符匹配最后一个-+
。
相关文章:
- 从末尾开始的字符串中获取反向子字符串
- 我如何使它,无论用户用空白字符串按 Enter 多少次,它总是打印"开始"字符串?
- 如何修复我的编码,刚开始使用字符串
- 如何将从第 2 个字符开始的字符串作为函数中的参数传递以进行递归,并约束数据 tiee 是函数中的字符串?
- 尝试查找从索引 0 开始的偶数长度子字符串
- 如何从字符串中间开始的子字符串
- 在字符串开始时删除某些字符
- 当给定一个字符串时,Cout 在行首开始打印
- c 字符串开始时ASCII值是什么
- c++ UTF-8 字符串 erro 从 10xxx 开始,带有 cpprestsdk
- 在匹配另一个模式的字符串中找到最短子字符串的开始和结尾索引
- 如何将SSCANF()设置为在字符串开始时忽略字符
- gvim 换行应该结束当前字符串并在下一行开始一个新的字符串
- 返回从字符串末尾 (C++) 之后的位置开始的子字符串
- 字符串文本的C++宏开始迭代器和结束迭代器
- 当试图在ostringstream中连接一个字符串时,这些字符串的内容会被修改和重构,字符串会在开始时被添加
- 如何读取从特定索引开始的字符串
- std::字符串在开始和结束之间替换
- 从字符串 c++ 的末尾开始按字符拆分字符串
- 替换字符,如替换全部(字符串,开始,结束,"_","-")