regex - 正则表达式中必须转义哪些特殊字符?

regex - 正则表达式中必须转义哪些特殊字符?

要知道何时以及不尝试逃避什么,有必要准确理解字符串所经过的上下文链。您将指定从最远端到其最终目的地的字符串,即由正则表达式解析代码处理的内存。

请注意内存中的字符串是如何处理的: if 可以是代码中的纯字符串,也可以是输入到命令行的字符串,但 a 可以是交互式命令行或 shell 脚本文件中声明的命令行,或者在代码提到的内存中的变量内,或通过进一步评估的(字符串)参数,或包含通过任何封装动态生成的代码的字符串......

每个上下文都分配了一些具有特殊功能的字符。

当您想在不使用其特殊功能(上下文本地)的情况下按字面意思传递字符时,您必须为下一个上下文转义它......这可能需要一些其他转义字符,这些转义字符可能还需要在前面的上下文中转义。此外,可能还有字符编码之类的东西(最阴险的是 utf-8,因为它看起来像普通字符的 ASCII,但甚至可能由终端根据其设置进行可选解释,因此它的行为可能不同,然后是 HTML 的 encoding 属性/XML,有必要准确地理解这个过程。

例如,命令行中以 , 开头的正则表达式perl -npe需要转移到一组exec系统调用,该系统调用以管道形式连接文件句柄,每个 exec 系统调用都只有一个由(非转义)空格分隔的参数列表,可能还有管道(|)和重定向(> N> N>&M)、括号、和的交互式扩展*,?$(())...(所有这些都是 *sh 使用的特殊字符,可能会在下一个上下文中干扰正则表达式的字符,但它们的计算顺序是:在命令行之前。命令行由程序为 bash/sh/csh/tcsh/zsh,本质上在双引号或单引号内,转义更简单,但不必在命令行中引用字符串,因为大多数空格必须以反斜杠作为前缀,而引号是没有必要保留字符 * 和 ? 的扩展功能,但是这会解析为与引号内不同的上下文。然后,当评估命令行时,在内存中获得的正则表达式(不是在命令行中写入的)接受与它相同的处理将在源文件中。对于正则表达式,方括号 [] 内有字符集上下文,perl 正则表达式可以被一大组非 alfa 数字字符引用(例如 m// 或 m:/better/for/path: ...)。

您在其他答案中有更多关于字符的详细信息,这些详细信息非常特定于最终的正则表达式上下文。正如我注意到你提到你发现正则表达式转义与尝试,这可能是因为不同的上下文有不同的字符集,混淆了你对尝试的记忆(通常反斜杠是在那些不同的上下文中用来转义文字字符而不是它的功能的字符)。

🎀 相关推荐

淘宝卖家常用的免费推广方式有哪些?免费推广有效果吗?
为啥打针时有人一定要盯着针头,有人一眼也不敢看?
唯品会联盟:2024 年度 GMV 增长超 15% 新增推手 24 万人以上
365名品汇推荐码多少

唯品会联盟:2024 年度 GMV 增长超 15% 新增推手 24 万人以上

📅 07-06 👀 8809