小编zer*_*bit的帖子

从正则表达式中提取静态字符串

我正在尝试有效地提取静态字符串(必须匹配给定正则表达式匹配的字符串).我已经能够在最简单的情况下完成它,但我正在尝试发现一个更强大的解决方案.


鉴于如下所示的正则表达式

"fox jump(ed|ing|s)"
Run Code Online (Sandbox Code Playgroud)

会给我们的

"fox,jumped,jumping,jumps"
Run Code Online (Sandbox Code Playgroud)

另一个例子是

"fox jump(ed|ing|s)?"
Run Code Online (Sandbox Code Playgroud)

哪会给我们

"fox,jump"
Run Code Online (Sandbox Code Playgroud)

因为可选的运算符


我现在的算法过于简单了.它将从正则表达式的末尾开始并删除组或单个字符,然后是这些运算符"*?" 以及"爆炸"分组OR运算符"(|)".这种方法效果很好,但没有考虑正则表达式的完整语法.您可以将其视为正则表达式的最小集生成过程(正则表达式可以"生成/必须匹配"的最小字符串集).

为什么? 我试图将一堆文本与大量正则表达式进行匹配.如果我可以获得"必需"这些正则表达式的"关键字"列表,我可以对该关键字进行快速文本搜索,以过滤我关心的正则表达式(忽略我保证不匹配的正则表达式,甚至跳过该文本完全有效地没有在文本上运行任何正则表达式,因为我们保证在我们的正则表达集中没有匹配).我可以在一个有效的数据结构(Binary Search/Trie/Aho-Corasick)中组织这组关键字,以便在我尝试通过有限自动机运行文本之前过滤一组正则表达式.在尝试运行正则表达式之前,我可以将极快的字符串匹配算法作为过滤阶段运行.在这个简单的过程中,我已经能够提高吞吐量.

regex

7
推荐指数
1
解决办法
644
查看次数

如何在bash脚本中转义"return"函数

下面的脚本将一堆csv文件加载到mysql数据库中.我试图在循环中执行此函数,但名为return的mysql表字段导致脚本认为它应该执行函数返回.

`around返回是为mysql转义它,它是一个mysql关键字.

for f in *.txt; 
do 
 mysql -uroot -ppassword -e "LOAD DATA INFILE '$f' INTO TABLE info FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (`return`,`id`,`field1`,`field2`);"; 
done
Run Code Online (Sandbox Code Playgroud)

mysql bash shell

5
推荐指数
1
解决办法
201
查看次数

标签 统计

bash ×1

mysql ×1

regex ×1

shell ×1