簡體   English   中英

支持RegEx搜索的Rich Edit Delphi控件

[英]Rich Edit Delphi Controls that Support RegEx Searches

對於在使用Delphi中支持正則表達式搜索的Rich Edit控件方面有經驗的任何人,我將不勝感激。

我玩弄了基於RichEdit.dll V3的控件,只是發現MS的ITextSelection.FindText 實現使用了一些Mickey Mouse正則表達式的變體(例如^ p表示),依此類推。

由於隱藏的RTF格式,針對TRichEdit1.text的正則表達式搜索返回了不匹配的SelStart位置。

我猜想這會排除任何基於RichEdit.dll的控件/組件,除非有人可以建議解決方法?

我也看過Dream Rich Editor,但擔心它的維護時間會更長(從2005年開始)。 否則,這看起來很理想,但是找不到任何聯系信息以詢問支持哪種ReGex語法(即PCRE?)

另一個選項是ProfHTMLEdit,但它在我對其進行測試的2MB HTML文件中塞滿了。 大型文件的編輯也沒有響應。 感到羞恥,因為控制看起來很有希望。

另一個組件是TRichView,但遺憾的是,它似乎不支持使用正則表達式進行搜索。

簡而言之,我需要一個Delphi 7控件,該控件允許簡單的編輯(即,粗體,斜體,選擇比對),最重要的是,可以使用正則表達式進行搜索(最好是PCRE ..,但不一定)。 不太擔心底層存儲機制(rtf,html,xyz)是什么。

任何幫助或指針/提示/提示大加贊賞。

此鏈接可能會有所幫助。 我無法從那里提到的組件的經驗談起,但是作為多年的HelpScribble用戶,我可以說Jan Goyvaert對他的產品的支持始終是傑出的。 您可以嘗試與他聯系-他可能知道有用的內容。 我確實想到,如果將文本從RichEdit控件復制到字符串變量(無格式),則可以搜索該位置,然后將該位置映射回控件中的文本。 只是一個想法。

很奇怪,但是Delphi的大多數regexp組件列表都沒有提到我幾乎一直使用的regexp組件:

VBScript_RegExp_55_TLB.pas

通過導入“ Microsoft VBScript正則表達式5.5”類型庫獲得。 之所以獲得VBScript標簽,是因為它是隨VBScript / Javascript 5.5和Internet Explorer 5.5一起引入的,這意味着如果您要求用戶具有IE5.5或更高版本,則可以確保最終用戶客戶端具有該庫。 我還沒有將其與豐富的編輯控件結合在一起。

我使用TRichView,盡管您說它不支持使用正則表達式進行搜索,但是您會獲得完整的源代碼。

我已經為自己的軟件對該軟件包進行了各種自定義,並且更改搜索功能的內部結構以支持正則表達式在我看來並不是一件容易的事。

對於擁有源代碼的任何RichEdit控件,這可能都是正確的。

因此,請看一下: “ ...在Delphi中使用正則表達式?” 了解如何自己添加它的想法。


我確實找到了實現正則表達式的TRichView用戶。 他描述了如何做 ,他使用的軟件包是TRegEx。 我本人並不熟悉TRegEx,但也許他是在指這個 ,或者您可以嘗試使用TRegExpr

您可以在About.com上找到有關Delphi的RegEx庫的良好列表。

基於對該問題的出色反饋,我對TRichEdit和RichEd20.dll進行了更多研究。

一些背景。 我想使用TPerlRegEx搜索TRichEdit控件內容並突出顯示匹配的結果。 以前使用RichEdit1.Lines.Text作為搜索主題的嘗試導致RegEx MatchExpressionOffset和RichEdit1.SelStart不匹配。

我以為這是由於RTF格式所致..但這只是我的腦子屁!

仔細檢查后,不使用RichEdit.FindText時有兩個問題需要考慮:

  1. 如果使用RichEdit.Text或RichEdit.Lines.Text,請注意它們包含額外的#$ D和#$ A回車符和換行符。
  2. 如果使用TPerlRegex.MatchedExpressionOffset,則此值基於1,而TRichEdit.SelStart則基於零。

要使用TPerlRegex回車符正確找到SelStart,確定SelStart時需要考慮換行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM