Regex 从perl教程中了解特定的perl正则表达式
嗨, 考虑到这个简单的regexp:Regex 从perl教程中了解特定的perl正则表达式,regex,perl,Regex,Perl,嗨, 考虑到这个简单的regexp: /(\w\w\w)*?TGA/g 这两条线: ATCGTTGAA ATCGTTGAATGCAAATGACATGAC 我试图逐步了解regexp引擎正在搜索的内容,即: 第1步:尝试匹配(\w\w\w)0次,成功,尝试匹配之后的TGA,失败(发生了什么?回溯?) 第二步: 谢谢大家。这很简单。你只需要分步分析 1) 捕获3字母数字 2) 继续捕获3个组,直到获得TGA非贪婪 所以在atcgtgaa中 1) ATC--GTT--GAA(找不到TGA所以先跳过,
/(\w\w\w)*?TGA/g
这两条线:
ATCGTTGAA
ATCGTTGAATGCAAATGACATGAC
我试图逐步了解regexp引擎正在搜索的内容,即:
第1步:尝试匹配(\w\w\w)0次,成功,尝试匹配之后的TGA,失败(发生了什么?回溯?)
第二步:
谢谢大家。这很简单。你只需要分步分析 1) 捕获
3
字母数字
2) 继续捕获3个组,直到获得TGA
非贪婪
所以在atcgtgaa
中
1) ATC--GTT--GAA(找不到TGA
所以先跳过,然后再开始搜索)
2) TCG--TTG--AA(找不到TGA
所以跳过第二步,然后再次开始搜索)
3) CGT--TGA
()
同样适用于第二个示例。不适用于心脏虚弱的人,但
使用“重新调试”
可以准确地显示正则表达式引擎正在做什么:perl-Mre=debug-e'$\=“ATCGTTGAA”/(\w\w\w)*?TGA/g'
有关输出含义的详细信息,请参见perldoc perldebguts
。更方便用户:(单击“Regex调试器”)。在第二个字符串上,第一次匹配后会发生什么?是否从此处继续?@BlueStarry在第一个匹配项被消耗后,对第二个字符串应用相同的字符串。由于(\w\w\w)
是可选的,正则表达式引擎直接在那里找到TGA
,因为在那里找不到组(\w\w\w)
,你说的组是什么意思(\w\w\w)在这里找不到?当然是一个CAT@BlueStarry是的CAT
在那里,但是在它之后没有TGA
。因此regex将离开C
从A
开始。在最后的同一行上,它将找到TGA
而没有可选组