Regex 学习Perl的正则表达式实践
在阅读和学习Perl时,我遇到了一个关于正则表达式的问题。在第9章中,练习3要求学生使用正则表达式将字符串a替换为另一个字符串b,并将b替换为a,例如: 如果a='hitman'和b='submitter',则“刺客谋杀了刺客”应修改为“刺客谋杀了刺客” 在本书中,答案是删除所有eoln,然后使用eoln作为占位符来处理这种情况,但这种方法似乎很笨拙,并且不具有普遍适用性。也许有人可以用一个更好的,例如,一行,来解决这个问题 谢谢你们的意见 魏紫瑶Regex 学习Perl的正则表达式实践,regex,perl,Regex,Perl,在阅读和学习Perl时,我遇到了一个关于正则表达式的问题。在第9章中,练习3要求学生使用正则表达式将字符串a替换为另一个字符串b,并将b替换为a,例如: 如果a='hitman'和b='submitter',则“刺客谋杀了刺客”应修改为“刺客谋杀了刺客” 在本书中,答案是删除所有eoln,然后使用eoln作为占位符来处理这种情况,但这种方法似乎很笨拙,并且不具有普遍适用性。也许有人可以用一个更好的,例如,一行,来解决这个问题 谢谢你们的意见 魏紫瑶 编辑:谢谢你们的意见,但一般的方法会很好的!:
编辑:谢谢你们的意见,但一般的方法会很好的!:) 非常具体,但可能适用于本案例(考虑到每个案例只有一个,且›杀手è在›阿萨辛è之前): 甚至
s/^(.*)(hitman)(.*)(assasin)(.*)$/$1$4$3$2$5/
或使用/e修改器:
s/(hitman|assasan)/$1 eq 'hitman' ? 'assasan' : 'hitman'/eg;
第二个例子检测是否找到了杀手。如果是,则替换为“assasan”。如果不是,用“杀手”代替。我会检查单词锚的开头和结尾
's/\<\([Aa]ssassin\)\>\(.*\)\<\([Hh]itman\)\>/\3\2\1/'
's/\\(.\\)\/\3\2\1/'
展开的是:s/\<([Aa]ssassin)>(.*)\<([Hh]itman)>/\3\2\1/
\
$$2
中有什么或者更确切地说,$hitman
中是什么,因为这就是这里计算的$$2
:(@tchrist:对不起,我的键盘吞了一个按键。应该是$3$2
–更新了我的答案/eg
版本很棒,除了拼写。哇,这就是我所说的正则表达式魔法!
s/(hitman|assasan)/$1 eq 'hitman' ? 'assasan' : 'hitman'/eg;
's/\<\([Aa]ssassin\)\>\(.*\)\<\([Hh]itman\)\>/\3\2\1/'