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

1 つ以上の後QRegExp("-+[\\S]+|[\\S]+-+")に少なくとも 1 つの非スペース非ハイフン文字が続き、その後に 1 つ以上の.QRegExp("-+[^-\\s]+-+")--

\S---最初に一致-+するハイフン、一致するハイフン、\S+最後に一致する別のハイフンがあるため、ハイフンのみのシーケンスを有効にするハイフンを含む非スペース文字に一致します-+

于 2013-01-19T09:48:51.017 に答える