- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我一直在寻找一篇关于何时需要双重转义和何时不需要的可靠文章,但我找不到任何东西。也许我看起来不够仔细,因为我确信那里有解释,但让下一个有这个问题的人很容易找到它!
以以下正则表达式模式为例:
/\n/
/domain\.com/
/myfeet \$ your feet/
没什么突破性的吧?好的,让我们在 PHP 的 preg_match 函数的上下文中使用这些示例:
$foo = preg_match("/\n/", $bar);
$foo = preg_match("/domain\.com/", $bar);
$foo = preg_match("/myfeet \$ your feet/", $bar);
据我了解,带引号的字符串值上下文中的反斜杠会转义后面的字符,并且表达式是通过带引号的字符串值给出的。
前一个会不会像做下面的那样,这不会导致错误吗?:
$foo = preg_match("/n/", $bar);
$foo = preg_match("/domain.com/", $bar);
$foo = preg_match("/myfeet $ your feet/", $bar);
哪个不是我想要的?这些表达式与上面的不同。
我不必像这样写他们双重转义吗?
$foo = preg_match("/\\n/", $bar);
$foo = preg_match("/domain\\.com/", $bar);
$foo = preg_match("/myfeet \\$ your feet/", $bar);
因此,当 PHP 处理字符串时,它会将反斜杠转义为一个反斜杠,然后在将其传递给 PCRE 解释器时保留该反斜杠?
或者 PHP 是否神奇地知道我想将反斜杠传递给 PCRE 解释器...我的意思是它怎么知道我不是在尝试 \"
转义我想要的引号在我的表达式中使用?还是在使用转义引号时只需要双斜杠?就此而言,您需要对引号进行三重转义吗?\\\"
你知道,这样引号被转义并留下一个双倍?
这有什么经验法则?
我刚刚用 PHP 做了一个测试:
$bar = "asdfasdf a\"ONE\"sfda dsf adsf me & mine adsf asdf asfd ";
echo preg_match("/me \$ mine/", $bar);
echo "<br /><br />";
echo preg_match("/me \\$ mine/", $bar);
echo "<br /><br />";
echo preg_match("/a\"ONE\"/", $bar);
echo "<br /><br />";
echo preg_match("/a\\\"ONE\\\"/", $bar);
echo "<br /><br />";
输出:
0
1
1
1
所以,它看起来在某种程度上对引号并不重要,但对于美元符号,我认为需要双重转义。
最佳答案
双引号字符串
当谈到在双引号内转义时,规则是 PHP 将检查紧跟在反斜杠后面的字符。
如果相邻字符在集合 ntrvef\$"
中或者它后面有一个数值(可以找到规则 here ),它会被评估为相应的控制字符或序数(十六进制)或八进制)表示,分别。
重要的是要注意,如果给出了无效的转义序列,则不会计算表达式并且反斜杠和字符都会保留。这与其他一些语言不同,在其他一些语言中,无效的转义序列会导致错误。
例如"domain\.com"
将保持原样。
请注意,变量也会在双引号内扩展,例如"$var"
需要转义为"\$var"
。
单引号字符串
自 PHP 5.1.1 起,单引号字符串中的任何反斜杠(并且后跟至少一个字符)将按原样打印,并且不会替换任何变量。这是迄今为止单引号字符串最方便的功能。
正则表达式
对于转义正则表达式,最好将转义留给 preg_quote()
:
$foo = preg_match('/' . preg_quote('mine & yours', '/') . '/', $bar);
这样您就不必担心哪些字符需要转义,因此它适用于用户输入。
另请参阅:preg_quote
更新
你添加了这个测试:
"/me \$ mine/"
这被评估为 "/me $ mine/"
;但在 PCRE 中,$
具有特殊含义(它是主题结尾的 anchor )。
"/me \\$ mine/"
这被评估为 "/me\$ mine/"
因此反斜杠为 PHP 本身转义,而 $
为 PCRE 转义。顺便说一句,这只是偶然的。
$var = 'something';
"/me \\$var mine/"
这被评估为 "/me\something"
,因此您需要再次转义 $
。
"/me \\\$var mine/"
关于php - 在 PHP PCRE 函数中双重转义或不双重转义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14783370/
我有一个 javascript 从用户输入中读取的 URL。这是 JavaScript 代码的一部分: document.getElementById("Snd_Cont_AddrLnk_BG").v
我将如何在 javascript 中转义斜杠// var j = /^(ht|f)tp(s?)://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$;/ 最佳答案 使用 \ 进行转
在解析到这样的对象之前,我要转义 & 和 =: var obb = parseJSON('{"' + text.replace(/&/g, "\",\"").replace(/=/g,"\":\"")
我正在使用 freemarker 生成一个 freemarker 模板。但我需要一些方法来转义 freemarker 标签。 我将如何逃脱 标签或 ${expression} ? 最佳答案 您也可以使
我正在尝试匹配方括号,即 excel 中正则表达式 VBA 中的 []。我正在尝试使用以下代码,但它不起作用。 Public Function IsSpecial(s As String) As L
我通过设置将 PowerShell 添加到我的上下文菜单中: Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Directory\she
我需要转义 $,因此我需要将所有出现的 $ 替换为 \$ 所以我写了这个方法: // String#replaceAll(String regex, String replacement) publi
我正在格式化我的问题。非常遗憾。这是我的问题的摘要 在 JSP 中我有一个字段 我输入的值类似于“cQN==ujyRMdr+Qi8dO9Xm*eRun+ner==aLTyt?aKmGI” 实际行动
我有一个文本文件,其内容是C:\temp 我想要值 C:\temp替换为从变量定义的不同值 此外,将从批处理文件(windows .cmd)中调用 perl oneliner set CMDDIR=C
有没有办法使用 jTemplates 来转义 {$,这样我就可以在 onBlur 中使用内联 javascript,例如 telegraaf 在 processTemplate 之后得到这个: 谢谢
我正在尝试将 wget 与包含“#”符号的 url 一起使用。无论我做什么来逃避这个角色,它都不起作用。我用过\、' 和 "。但它们都不起作用。有人有什么建议吗? 谢谢! 最佳答案 如果您真的想让它有
我想知道如何从数据库中回显带有 $ 符号的字符串。此时,数据库中的值“Buy one for $5.00”将转换为“Buy one for .00”。 假设该字段的名称为 title,值为 Buy o
我在 mySQL 中有一个查询,旨在返回我们网站上使用的搜索词。是的,这是一个标签云,是的,我知道它是一条鲻鱼 :) 我们有一个管理页面,管理员可以在其中查看搜索词并选择将它们排除在云端之外。这些词进
我有一个文本区域。在其点击事件上。我将其插入数据库中,然后将其显示为元素列表中的第一个元素。问题是。如果我输入""在textarea中,jquery无法正确显示。它显示为空。代码是 var note
我想知道是否有某种字符串前缀,这样 cstring 就可以按原样使用,而不需要我转义所有字符。我不是 100% 确定。我记得一些关于在字符串前加上 @ 符号( char str[] = @"some\
这个问题在这里已经有了答案: How do I escape curly-brace ({}) characters in a string while using .format (or an f
C/C++编译器如何操作源代码中的转义字符["\"]?如何编写用于处理该字符的编译器语法?遇到那个字符后,编译器会做什么? 最佳答案 大多数编译器分为几个部分:编译器前端称为 lexical anal
我计划接受用户输入,并将其插入到一个 div 中 user_content 一个用户提供内容,另一个用户接收内容。 我认为我会遵循的建议来自 https://www.owasp.org/index.p
我有一个这种形式的 url - http:\\/\\/en.wikipedia.org\\/wiki\\/The_Truman_Show。我怎样才能使它成为正常的网址。我试过使用 urllib.unq
我有一个带有转义数据的字符串 escaped_data = '\\x50\\x51' print escaped_data # gives '\x50\x51' 什么 Python 函数会对其进行反转
我是一名优秀的程序员,十分优秀!