所以我是正则表达式的新手,我试图编写一个允许我用'
替换撇号(\'
)的表达式。当我在http://myregextester.com上测试时,我提出的正则表达式与我的所有测试用例一起使用,但是当我在代码中实现它时完全错误。
无论如何,这就是我现在所拥有的:
preg_replace('/((?<!\\)\'+(?=\d\ds\b))|(\b(?<=\w)(?<!\\)\'+(?=\w+\b))/','\'',$text);
并抛出此错误:
遇到PHP错误 严重性:警告
消息:preg_replace()[function.preg-replace]:编译失败:丢失)偏移50
我已经计算了二十次才能看到)
不匹配的地方,而我的眼睛则没有。这是我的几个方面之一:
( ( ?<!\\ )'+ ( ?=\d\ds\b ) ) | ( \b ( ?<=\w ) ( ?<!\\ ) '+ ( ?=\w+\b ) )
1 2 3 4 5 6 7 8 9 10 11 12 13 14
任何想法,或指出新手无法发现的明显错误都会非常感激。
答案 0 :(得分:2)
如果你在一个字符串中逃脱,你还需要逃避逃脱的角色;这真让人困惑!
如果您需要\
,则需要执行\\\\
答案 1 :(得分:2)
\\)
变为\)
- 转义右括号 - 在正则表达式中,因为双反斜杠序列被插入到即使在由单引号分隔的字符串文字内,也会出现单反斜杠。但问题是,正则表达式模式中的\)
序列用于表示文字)
符号(否则将被解析为元字符)。
您打算做的最好用\\\\)
编写。这样,字符串文字中的每个\\
序列在模式中变为单个\
。模式解析器将看到:
\\)
...一个字面反斜杠符号,后跟)
元字符。
但似乎这里还有另一个问题:在你的正则表达式中,你正在寻找一些特殊的(一系列)撇号,但是再用单撇号替换它们。请记住,字符串文字中的\'
只是 - 单引号!你可能想在这里使用'\\\''
。
答案 2 :(得分:0)
我在这里遗漏了什么吗?为什么不呢?
str_replace("'", "\'", $str)