如何编写Qt正则表达式以突出显示以非单词字符开头和结尾的字符串?

时间:2013-01-19 08:58:45

标签: c++ regex qt

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.实现我的所有目标而不会不加重?

1 个答案:

答案 0 :(得分:1)

如果您要匹配一个或多个QRegExp("-+[\\S]+|[\\S]+-+")后跟至少一个非空格非连字符后跟一个或多个QRegExp("-+[^-\\s]+-+"),请使用-代替- \S }。

---匹配包含连字符的任何非空格字符,该连字符使得仅连字符序列有效,因为-+有一个与第一个\S+匹配的连字符,一个匹配-+的连字符和另一个匹配最后{{1}}的连字符。