支持正则表达式搜索的Rich Edit Delphi控件

支持正则表达式搜索的Rich Edit Delphi控件,delphi,Delphi,如果您有在Delphi中使用支持正则表达式搜索的丰富编辑控件的经验,我将非常感谢您的帮助 我曾经玩弄过基于RichEdit.dll V3的控件,结果发现MS的ITextSelection.FindText使用了一些MS-Mickey-Mouse正则表达式的变体(例如,^p表示段落)等等 正则表达式搜索TRichEdit1.text返回由于隐藏RTF格式而不匹配的SelStart位置 我想这排除了任何基于RichEdit.dll的控件/组件,除非有人提出解决方案 我也看了一下,但担心这种情况会持续

如果您有在Delphi中使用支持正则表达式搜索的丰富编辑控件的经验,我将非常感谢您的帮助

我曾经玩弄过基于RichEdit.dll V3的控件,结果发现MS的ITextSelection.FindText使用了一些MS-Mickey-Mouse正则表达式的变体(例如,^p表示段落)等等

正则表达式搜索TRichEdit1.text返回由于隐藏RTF格式而不匹配的SelStart位置

我想这排除了任何基于RichEdit.dll的控件/组件,除非有人提出解决方案

我也看了一下,但担心这种情况会持续很久(从2005年开始)。否则,这看起来很理想,但找不到任何联系信息来询问支持什么正则表达式语法(即PCRE?)

另一个选项是我测试的2MB HTML文件。编辑对大文件也没有反应。羞耻,因为控制看起来很有希望

然而,另一个组件很遗憾,它似乎不支持使用正则表达式进行搜索

简单地说,我的要求是一个Delphi 7控件,它允许简单的编辑(即粗体、斜体、选择对齐),最重要的是,能够使用正则表达式进行搜索(最好是PCRE..,但不一定)。不要太在意底层存储机制(rtf、html、xyz)是什么


非常感谢您的任何帮助或提示。

可能会有所帮助。我不能从这里提到的组件的经验来说话,但作为一个多年的帮助Scribble用户,我可以说Jan Goyvaert对其产品的支持始终是卓越的。你可以试着联系他-他可能知道一个有用的组件。我确实想到,如果将RichEdit控件中的文本复制到字符串变量(无格式),则可以搜索该变量,然后将该位置映射回控件中的文本。只是想一想。

我使用TRichView,尽管您说它不支持使用正则表达式进行搜索,但您可以从完整的源代码中获得它

我已经为我自己的软件包做了各种定制,在我看来,改变搜索功能的内部以支持正则表达式不会太困难

这可能适用于任何具有源代码的RichEdit控件

那么请看一下:了解如何自己添加它


我确实找到了一个TRichView的用户,他实现了regex,他用的包裹是TRegEx。我自己也不熟悉TRegEx,但也许他指的是,或者你可以尝试使用


您可以在About.com上找到一个很好的Delphi正则表达式库列表。

这很奇怪,但是大多数Delphi正则表达式组件列表都没有提到我几乎一直使用的一个:

VBScript_RegExp_55_TLB.pas

通过导入“Microsoft VBScript正则表达式5.5”类型库获得。它之所以有VBScript标签,是因为它是与VBScript/Javascript 5.5和Internet Explorer 5.5一起引入的,这意味着如果您要求用户具有IE5.5或更高版本,您可以确保最终用户客户端拥有该库。不过,我还没有将它与丰富的编辑控件结合起来。

基于对这个问题的良好反馈,我对TRichEdit和RichEd20.dll做了更多的研究

一些背景。我想使用TPerlRegEx搜索TRichEdit控件内容并突出显示匹配的结果。以前使用RichEdit1.Lines.Text作为搜索主题的尝试导致RegEx MatchedExpressionOffset和RichEdit1.SelStart不匹配

我原以为这是由于RTF格式。。但那只是我在放屁

仔细检查,在不使用RichEdit.FindText时,需要考虑两个问题:

  • 如果使用RichEdit.Text或RichEdit.Lines.Text,请注意它们包含额外的#$D和#$A回车符和换行符
  • 如果使用TPerlRegex.MatchedExpressionOffset,则这是基于一的,而TRichEdit.SelStart是基于零的

  • 要使用TPerlRegex正确查找SelStart,在确定SelStart时需要考虑回车和换行。

    非常感谢您的回答。“您可以搜索该位置,然后将该位置映射回控件中的文本。只是想一想。”我确实尝试过在纯文本上执行正则表达式搜索,但在使用RichEdit.SelStart时,纯文本标记上的匹配位置不会映射回匹配。。。遗憾的是,生活会简单得多:)不幸的是,Jan Goyvaerts不知道有任何具有内置正则表达式功能的rich edit Delphi组件。将纯文本复制到TPerlRegEx中,并使用返回的偏移量和长度告诉rich edit控件进行选择和/或替换应该可以工作。感谢lkessler的评论。我将向TRichView开发人员发送一封电子邮件,内容如下。我在他们的支持论坛上搜索了一下,但是没有看到关于regex支持的太多流量。干杯,太棒了!我以前使用过TRegExpr,但不如TPerlRegEx好。谢谢论坛链接!我已经删除了开发者和电子邮件,将签出你发送的论坛链接。真糟糕!我以前使用过TRegExpr,但它不如TPerlRegEx好,但应该能够使用相同的逻辑,轻松地用一个组件替换另一个组件。你说的“支持正则表达式搜索”是什么意思?控件为什么以及如何支持它?我的意思是,您可以从rich edit或任何其他控件获取文本,并使用正则表达式库进行搜索。要显示搜索对话框,请使用TFindDialog或编写自己的对话框。要指示匹配的子字符串,请在控件中设置选择。使用Delphi 2009及更高版本时,还需要考虑TPerlRegEx与UTF8String一起工作,并且偏移量为UTF-8字节长度。原因是t