sed正则的扩展与非扩展区别

sed的正则表达式,有扩展正则与基本正则(或叫非扩展正则)之分,默认非扩展。两者区别主要是对几个特殊字符的定义上:即 问号‘?’,加号 ‘+’, 圆括号‘()’, 花括号‘{}’, 竖线管道符 ‘|

这是个坑,尤其对习惯使用扩展正则语法的用户而言。

我们一般用的是 GNU 的 sed ,以之为例。

具体来说,两者区别是,在基本正则中,上述几个字符本身没有定义特殊功能,与其它普通字符一样,只代表它们字面上的字符。而在扩展正则上,则有相应的定义。

不过,事实上,在基本正则模式下,还是能让这几个字符表示相应的正则符号定义,方法是用反斜线\转义一下。这样就显得有点怪异了,扩展与非扩展功能完全一致,除了这几个字符的转义与否正好相反。猜测,在基本正则里的这个约定是GNU sed干的。其他版本的sed的基本模式下,完全不支持扩展语法。

所以了,最佳的使用习惯是,准确的区分是否用扩展正则的语法,如果用了,那就指定  -E 参数以启用扩展。否则,就完全不要用,尤其最好不要用依赖GNU sed里基本正则定义的怪异的扩展语法。

GNU sed 的手册有如下

In GNU sed, the only difference between basic and extended regular expressions is in the behavior of a few special characters: ‘?’, ‘+’, parentheses, braces (‘{}’), and ‘|’.

With basic (BRE) syntax, these characters do not have special meaning unless prefixed with a backslash (‘\’); While with extended (ERE) syntax it is reversed: these characters are special unless they are prefixed with backslash (‘\’).

 

 

asp/vbscript函数RemoveHTML(),正则表达式高效删除所有html标签,包括javascript及CSS标签

asp/vbscript 函数RemoveHTML(),正则表达式高效删除所有html标签,包括javascript及CSS标签<script...>xxx</script>与<style...>xxx</style>

''删除字符串中所有html标记,包括javascript及css代码区块,同时删除换行符
'' by fengyqf 20100929

Function RemoveHTML(str)
    Dim objRegExp, Match,strHTML
    if isnull(str) then
        str=""
    end if
    strHTML=str
    strHTML=replace(replace(replace(strHTML,vblf,""),vbcr,""),vbcrlf,"")

    Set objRegExp = New Regexp
    objRegExp.IgnoreCase = True
    objRegExp.Global = True

    objRegExp.Pattern = "<script[^>]*?>.*?</script>"
    strHTML  = objRegExp.Replace(strHTML,"")

    objRegExp.Pattern = "<style[^>]*?>.*?</style>"
    strHTML  = objRegExp.Replace(strHTML,"")

    objRegExp.Pattern = "<.+?>"
    strHTML  = objRegExp.Replace(strHTML,"")

    Set objRegExp = Nothing

    RemoveHTML=strHTML
End Function

UE/US正则表达式查找搜索替换,查询的字符串未找到(UE studio/ultraEdit)/修改UE使用Perl正则引擎

UE默认使用UltraEdit正则表达式,就是UE自己改造过的正则语法,跟常用的perl兼容正则表达式语法不一致,所以即使写对了正则表达式,还会显示“查询的字符串未找到”。
这就需要修改UE的正则引擎为Perl引擎,方法如下:
在crtl+f,在“查找”对话框里点右下角的“高级”按钮,下面长出来部分的“正则表达式引擎”勾选perl,即可以。
如下图所示:

[附注] 网上有文章如是说
--------------------------------
用UltraEdit打开文本,首先到菜单中选择正则表达式引擎,正则表达式引擎分支位于“配置 - 搜索”之下,有如下选项:

Perl 兼容正则表达式
如果选中该选项,则编辑器将基于 Boost C++ 库使用 Perl 样式的正则表达式(当在查找/替换对话框里选中正则表达式时)。
UltraEdit 样式正则表达式
如果选中该选项,则编辑器将在查找/替换对话框里选中正则表达式时使用 UltraEdit 样式的正则表达式。
UNIX 样式正则表达式
如果选中该选项,则编辑器将在查找/替换对话框里选中正则表达式时使用 UNIX 样式的正则表达式。
选择自己喜好的正则表达式类型,不同的引擎语法不同,比如Perl兼容的正则表达式,回车是\r,而在UltraEdit风格的以及Unix兼容的回车则分别是^p和\n,下面以UltraEdit风格来说明。
选好风格后开始搜索,使用Ctrl+R弹出替换对话框,钩选“正则表达式”,搜索内容中输入 *X400*^p ,替换为空即可,点击全部替换后,则所有包含X400字样的行都被删除。
-----------------------------------
不知这里讲的是哪个版本的UE/US,跟目前使用的UES06.50a+1并不一样。