繁体   English   中英

连接两个捕获组

[英]Concatenating two capture groups

我有一个可以分成 3 部分的字符串(Keep1 | Ignore | Keep2)。 目标是删除中间的子字符串并连接其他两个子字符串。 为了实现这一点,我创建了两个正则表达式,一个为 Keep1 创建一个捕获组,另一个为 Keep2 创建一个捕获组。

示例文本:

First String.<ref> IGNORE </ref> Second String.

第一个正则表达式:

.*(?=<ref>)    

输出:

First String.

第二个正则表达式:

(?<=&lt;\/ref&gt;).*   

输出:

Second String.   

期望输出:

First String. Second String.

到目前为止,我一直无法找到连接两个字符串的方法,这在 flex 上可行吗?

(F)lex 不实现捕获组,也不实现前瞻断言。 一般而言,它只实现满足“正则表达式”数学定义的构造,因此 abd 可以用在线性时间和恒定空间中工作的简单有限状态机来实现。

其正则表达式语法的(简短而完整的)文档可在Flex 手册 中找到。

(“flex”中的“f”代表“fast”,但最初的“lex”也很活泼,主要是因为这个设计决定。)

您有两种选择,具体取决于您的代币的确切性质:

  1. 如果您确实可以从第一部分识别出令牌,那么您可以使用开始条件来识别令牌的其余部分

  2. 否则,您可以在一个正则表达式中识别整个令牌,然后重新扫描它以找出您想要保留的部分。 您可能会也可能不会使用 flex 进行第二次扫描; 同样,您可以使用开始条件为重新扫描应用不同的规则,但这将取决于您的模式的确切性质。 您还可以使用正则表达式库(Posix 标准库或一些更灵活的库(例如 PCRE))重新扫描。

请注意,(f)lex 也没有实现非贪婪重复,因此如果要实现“以 X 开头并以 Y 结尾的最短字符串”,则需要使用类似于(最后一个)示例中所示的技术在有关启动条件的 Flex 手册章节中

暂无
暂无

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

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