Tob*_*oby 4 regex coldfusion replace htmlspecialchars
我需要&在这样的字符串中替换all和with :
Übung 1: Ü & Ä
Run Code Online (Sandbox Code Playgroud)
或者在HTML中
Übung 1: Ü & Ä
Run Code Online (Sandbox Code Playgroud)
就像你在字符串中看到htmlspecialchars(但是&没有显示为&),所以我需要将它们从我的替换中排除.我对正则表达式并不熟悉.我需要的只是一个表达式,它执行以下操作:
搜索&它可以跟随 (space) or does not follow some chars, excluding a space, which are ending with a ;.然后替换它&.
我试过这样的事情:
<cfset data = ReReplace(data, "&[ ]|[^(?*^( ));]", "&", "ALL") />
Run Code Online (Sandbox Code Playgroud)
但用$ amp替换每个字符; ... ^^'
对不起,我真的没有得到那个正则表达式的东西.
你的尝试模式&[ ]|[^(?*^( ));]失败的原因主要是因为你有一个|但没有绑定容器 - 这意味着你正在替换&[ ]OR [^(?*^( ));]- 而后者将匹配大多数东西 - 你也误解了字符类的工作方式.
里面[.. ](一个字符类)有一些简单的规则:
^则被否定,否则^就是字面意思.\w),或者转义后续字符(在char类中只需要这样[ ] ^ - \).此外,您不需要在字符类中放置空格 - 文字空间可以正常工作(除非您处于自由间隔注释模式,需要明确启用).
希望这可以帮助您了解出了什么问题?
至于实际解决你的问题......
要匹配不启动HTML实体的&符号,您可以使用:
&(?![a-z][a-z0-9]+;|#(?:\d+|x[\dA-F]+);)
Run Code Online (Sandbox Code Playgroud)
也就是说,一个&符号,然后是以下任何一个的负向前瞻:
一个字母,一个字母或一个数字,一个分号 - 即一个命名的实体参考
一个哈希,然后是一个数字,或一个x后跟一个十六进制数,最后是一个分号 - 即一个数字实体引用.
要在CFML使用,以取代&与&将是:
<cfset data = rereplaceNoCase( data , '&(?![a-z][a-z0-9]+;|##(?:\d+|x[\dA-F]+);)' , '&' , 'all' ) />
Run Code Online (Sandbox Code Playgroud)