0

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 中是否有更好的方法来做到这一点。实现我的所有目标而不突出显示?

4

1 回答 1

1

如果您想匹配一个或多个QRegExp("-+[\\S]+|[\\S]+-+")后跟至少一个非空格非连字符后跟一个或多个.QRegExp("-+[^-\\s]+-+")--

\S匹配任何非空格字符,包括连字符,这使得只有连字符的序列有效,因为---有一个连字符要匹配 first -+,一个连字符要匹配\S+,另一个连字符要匹配 last -+

于 2013-01-19T09:48:51.017 回答