Regex SED正则表达式的麻烦
为了修复带有无效标记的大型sql转储,我构建了以下正则表达式 这个搜索Regex SED正则表达式的麻烦,regex,sed,Regex,Sed,为了修复带有无效标记的大型sql转储,我构建了以下正则表达式 这个搜索 \[ame=(?:\\"){0,1}(?:http://){0,1}(http://(?:www.|uk.|fr.|il.|hk.){0,1}youtube.com/watch\?v=([^&,",\\]+))[^\]]*\].+?video\]|\[video\](http://(?:www.|uk.|fr.|il.|hk.){0,1}youtube.com/watch\?v=([^\[,&,\\,"]+)
\[ame=(?:\\"){0,1}(?:http://){0,1}(http://(?:www.|uk.|fr.|il.|hk.){0,1}youtube.com/watch\?v=([^&,",\\]+))[^\]]*\].+?video\]|\[video\](http://(?:www.|uk.|fr.|il.|hk.){0,1}youtube.com/watch\?v=([^\[,&,\\,"]+))\[/video\]
这取代了
[video=youtube;$2$4]$1$3[/video]
因此:
[ame=\"http://www.youtube.com/watch?v=FD5ArmOMisM\"]YouTube - Official Install Of X360FDU![/video]
将成为
[video=youtube;FD5ArmOMisM]http://www.youtube.com/watch?v=FD5ArmOMisM[/video]
它在EditPadPro(Windows)中表现得很有魅力,但当我尝试在基于Linux的MySQL中导入它时,它会与代码页发生冲突。
因此,由于该文件来自Linux安装,我尝试了SED,但它给了我错误。显然,它有一种不同的方法来构建正则表达式
这是相当紧迫的做替换,所以我没有时间阅读SED手册
你能帮我把正则表达式迁移到SED友好的格式吗
先走一步
更新:我添加了建议的转义字符
\[ame=\(?:\\"\)\{0,1\}\(?:http:\/\/\)\{0,1\}\(http:\/\/\(?:www.|uk.|fr.|il.|hk.\)\{0,1\}youtube.com\/watch\?v=\([^&,",\\]+\))[^\]]*\].+?video\]|\[video\]\(http:\/\/\(?:www.|uk.|fr.|il.|hk.\)\{0,1\}youtube.com\/watch\?v=\([^\[,&,\\,"]+\))\[\/video\]
但是我仍然得到错误-unknown命令:')'Sed只是对您正在使用的正则表达式有一些不同的转义规则
转义的()
-用于分组\(\)
不适用于字符类[]
为分子转义的{}
{\}
我注意到在封闭组上有几个未替换的
)
。您的正则表达式使用了与PCRE-Perl兼容的正则表达式表示法。按照POSIX的定义(sed
不支持PCRE,它是1978年前后第7版Unix标准化的内容,是Unix以前版本的延续)
即使支持ERE(扩展正则表达式)和BRE(基本正则表达式)的版本4.2.1也不支持PCRE
您最好的选择可能是使用Perl为您提供所需的PCRE。如果没有,请使用您选择的脚本语言并支持PCRE。您尝试了什么
sed
命令?肯定没有与sed兼容的正则表达式我创建了一个仅包含搜索reg表达式的文件,并执行了sed-f regexpscript.txt mytext.txt。我会犯错误。我用的是我在大学里学的正则表达式。我无法理解SED可能不使用标准拟声学的原因。皮蒂:(sed
比您年长,@Pytzamarama,多年来一直工作正常。它使用一组特定的正则表达式。由于您没有向我们确切显示您正在使用的文件,也没有显示如何调用它,因此您编写的内容与需要编写的内容之间可能存在各种问题。特别是,如果您有s/a/b/
,搜索正则表达式和替换正则表达式(a和b)都不包含未转换的斜杠,这一点至关重要。但是,您可以使用任意字符作为分隔符;请尝试^G(control-G)例如,它不会出现在URL中。您也可以使用“%”。您的正则表达式使用PCRE-Perl兼容的正则表达式-表示法。sed
as标准不支持PCRE.AFAICS,甚至GNUsed
,后者支持BRE(扩展和基本正则表达式)不支持PCRE。或者只有比我在RHEL 5 Linux上发现的更新版本的GNU sed支持PCRE。(GNU sed 4.2.1不支持PCRE。)欢迎来到regexes.Thanx的奇妙世界,获取您的答案!我做到了(我更新了第一篇文章),但我仍然收到错误“Unknown Command^”,“Unmatched”(或)/('听起来你需要仔细查看你的regexp并确保所有对都是闭合的。你必须转义斜杠字符,比如http:\/\/或者用a替换外部项。\不是所有对都是闭合的,我忽略了你的
'没有被转义。但是,我认为你最好用f来解决这个问题通过调整EditPad的输出,代码页问题比修复正则表达式要简单得多。
\[ame=\(?:\\"\)\{0,1\}\(?:http:\/\/\)\{0,1\}\(http:\/\/\(?:www.|uk.|fr.|il.|hk.\)\{0,1\}youtube.com\/watch\?v=\([^&,",\\]+\)\)[^\]]*\].+?video\]|\[video\]\(http:\/\/\(?:www.|uk.|fr.|il.|hk.\)\{0,1\}youtube.com\/watch\?v=\([^\[,&,\\,"]+\)\)\[\/video\]