Windows 7 SP1
MSVS 2010
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.实现我的所有目标而不会不加重?
答案 0 :(得分:1)
如果您要匹配一个或多个QRegExp("-+[\\S]+|[\\S]+-+")
后跟至少一个非空格非连字符后跟一个或多个QRegExp("-+[^-\\s]+-+")
,请使用-
代替-
\S
}。
---
匹配包含连字符的任何非空格字符,该连字符使得仅连字符序列有效,因为-+
有一个与第一个\S+
匹配的连字符,一个匹配-+
的连字符和另一个匹配最后{{1}}的连字符。