尝试重新替换并替换以修改某些数据

时间:2015-03-13 16:15:32

标签: regex coldfusion

我患有正则表达疾病,我正在服用药物但没有发生任何事情,现在我再次陷入这个问题

<cfset Change = replacenocase(mytext,'switch(cSelected) {',' var x = 0;while(x < cSelected.length){switch(cSelected[x]) {','one')>

这没有改变任何东西

我也试过了Rereplace

<cfset Change = rereplacenocase(mytext,'[switch(cSelected) {]+',' var x = 0;while(x < cSelected.length){switch(cSelected[x]) {','one')>

这造成了奇怪的结果

1 个答案:

答案 0 :(得分:0)

括号,方括号和大括号是RegEx的任何实现中的特殊字符。在[square brackets]中包含内容意味着[fifty]中的任何字符都匹配f,i,t,y中的任何一个。它后面的加号只是意味着尽可能多地匹配这些字符中的任何一个。所以是[switch(cSelected) {]+会替换switch(cSelected) {,但它也会替换任何出现的switch,或s或w,或单词thistwitch(),因为这些中的每个字符都是在你的角色类中表示。

作为正则表达式,您需要(switch\(cSelected\) \{)+在这里没用,我们必须转义我们想要字面表示的括号。逃避花括号也是一个好主意,因为它们在正则表达式的部分内容中具有特殊含义,我相信当你是regex的新手时,没有过度转义这样的东西。

(switch            # Opens Capture Group
                     # Literal switch
 \(cSelected       # Literal (
                     # Literal cSelected
 \)                # Literal )
                     #   single space
 \{                # Literal {
)                  # Closes Capture Group

您还可以尝试(switch\(cSelected\)\s*\{)之类的内容,使用令牌\s*来表示任意数量的空白字符

(switch            # Opens CG1
                     # Literal switch
 \(cSelected       # Literal (
                     # Literal cSelected
 \)                # Literal )
 \s*               # Token: \s for white space
                     # * repeats zero or more times
 \{                # Literal {
)                  # Closes CG1

需要什么,以及人们无法提供太多帮助的原因是您要修改的内容和更多代码行的摘录。

非正则表达式ReplaceNoCase()无法正常工作的潜在原因是它无法进行所需的匹配,这可能是空白问题,或者可能是您有两个变量设置{ {1}}基于Change变量的操作..