繁体   English   中英

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

[英]How do I write a Qt regular expression to highlight strings starting and ending with non-word characters?

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.做到我的所有目标而又毫不掩饰?

如果要匹配一个或多个,请使用QRegExp("-+[^-\\\\s]+-+")代替QRegExp("-+[\\\\S]+|[\\\\S]+-+") -随后在至少一个非空间非连字符后面的一个或多个-

\\S匹配任何非空格字符,包括连字符,该连字符使仅连字符序列有效,因为---具有连字符以匹配第一个-+ ,连字符以匹配\\S+和另一个连字符以匹配last- -+

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM