我有一个字符串,想要使用正则表达式匹配两个第一个分隔符之间的子字符串。
例如,带有分隔符create table my_table(
id int primary key auto_increment,
val1 float,
val2 float
);
insert into my_table(
val1,
val2
) values (
rand(),
rand()
);
select * from my_table;
的字符串foo"text"bar anotherfoo"anothertext"anotherbar
应该会产生"
。
我找到了以下可能的解决方案:
text
"(.*?)"
(?<=")(.*?)(?=")
哪一个是最有效的方法?或者我错过了这些解决方案表现不同的情况(假设设置了新的线条修改器以使点与新线匹配)?
答案 0 :(得分:2)
由于分隔符是单个字符,并且匹配的子字符串不应包含它们,因此否定字符类解决方案("([^"]*)"
)效率最高。
如果您只想匹配一次,则甚至不需要关闭"
:只需使用"([^"]*)
。
当没有结束分隔符且初始分隔符后文本相当大时,延迟点匹配("(.*?)"
)技术可能会导致性能问题。
Lookarounds几乎总是涉及在每个测试位置检查一些子模式的额外开销。由于这里的分隔符是单个字符,因此这里的lookbehind / lookahead效率不高。如果无法访问捕获组,则只想使用此解决方案。在Python中,捕获效果很好,因此无需使用此解决方案。