我已经构建了以下正则表达式,以便修复带有无效标记的大型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=([^\[,&,\\,"]+))\[/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友好格式?
提前Thanx!
更新:我添加了提出的转义字符
\[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\]
但我仍然会收到错误 - 未知命令:')'
答案 0 :(得分:2)
您的正则表达式使用PCRE - Perl兼容正则表达式 - 表示法。正如POSIX所定义的那样(编写了大约1978年的第7版Unix标准化版,这是以前版本的Unix的延续版),sed
不支持PCRE。
支持ERE(扩展正则表达式)和BRE(基本正则表达式)的GNU sed版本4.2.1不支持PCRE。
您最好的选择可能是使用Perl为您提供所需的PCRE。如果做不到这一点,请在PCRE支持下使用您选择的脚本语言。
答案 1 :(得分:1)
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\]
我注意到有几个没有封闭的小组)
。