我有一个字符串可以分成3个部分(Keep1 | Ignore | Keep2)。目标是删除中间子串并连接其他两个子串。为此,我创建了两个正则表达式,一个用于为Keep1创建一个捕获组,另一个用于Keep2。
First String.<ref> IGNORE </ref> Second String.
.*(?=<ref>)
First String.
(?<=<\/ref>).*
Second String.
First String. Second String.
到目前为止,我还没有找到连接两个字符串的方法,在flex上有可能这样吗?
(F)lex不实现捕获组,也不实现先行断言。一般而言,它仅实现满足“正则表达式”的数学定义的构造,因此可以使用在线性时间和恒定空间中工作的简单有限状态机来实现abd。
正则表达式语法的(简短和完整)文档可在Flex manual中找到。
(“flex”中的“f”代表“快”,但原来的“lex”也非常活泼,基本上是因为这个设计决定。)
您有两种选择,具体取决于令牌的确切性质:
注意(f)lex也没有实现非贪婪的重复,所以如果你想实现“以X开头并以Y结尾的最短字符串”,你需要使用像(last) example in the Flex manual chapter on start conditions中所示的技术。