![](/img/trans.png)
[英]How do I build a XML file using Qt classes and functions and escape all non-Unicode characters?
[英]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.