Regex 从perl教程中了解特定的perl正则表达式

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所以先跳过,

嗨, 考虑到这个简单的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
所以先跳过,然后再开始搜索)

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
而没有
可选组