浅谈lisp与shell中转义字符和正则表达 (一)
来源:互联网 发布:集奥聚合怎么样 知乎 编辑:程序博客网 时间:2024/06/06 03:17
转义本身包含两个层次的含义:特殊字符--> 普通字符 普通字符-->具有特殊含义。转义字符为\
具有特殊含义的元字符"<" ">" "$" "\" "|" "&" "*" "?" ,可以通过转义字符\,单引号,双引号使它去掉特殊含义。
普通字符通过转义字符具有特殊含义,\n 表换行。\e 表esc字符
对于string的值,它会在碰见\的时候,将有特殊含义的字符转义为一个普通的字符,而\[a-z]或\[A-Z]都是维持原样,你别误解为"hello\n"它最后会输出hello和一个换行。造成这么认为的原因时上面说引号解释\。把它当成转义字符,其实这个事情你应该清楚为啥它会解释转义字符\。因为如果里面碰见$的话,你说是用变量的值呢?还是单纯的就是字符$呢?所以我们就需要有一个由特殊到普通字符的转义。而\n这种由普通到特殊的字符,只有碰到一定的函数时才会表现为制表符的功能。比如printf.
你可义发现echo命令的话,会把后面的所有字符都作为一个整体看待,如果是字符串形式,就尽量维持字面值,否则就是将他们的值拼接到一块。并且它在最后会有一个换行符输出。
字符串的值:你要清楚为什么会有字符串这种形式,因为我们就是要通过双引号尽力达到一个维持字面值的目的,这也是为啥双引号中的转义字符\仅仅实现将特殊含义字符串转义为一个普通字符串的功能,比如"\\n"它的值为\n,因为当我们读入第一个\时它会看下一个字符是什么,如果是个特殊字符就转义成普通字符,否则就尽量维持字面形式如"\n"结果同样为\n。跟这个结果对比的是下面第6个的输出情况它没有维持\n,而是输出为n。我感觉这就是需要注意的一点,这个时候它应该是连接的各个字段的值。因为你看\n的值就是n。
printf 会根据字符分割符进行字符划分,同时注意为啥第二个形式会输出换行了?因为就像上面字符串所述它必须尽量维持字面值即"hello world \n"的值为 hello world \n。所以printf看到\n会输出换行。而如果后面不是字符串时,它会在碰见\时\[a-z A-Z] -->[a-z A-Z]。记住这是加不加引号的区别。
如果多个转义字符的话,它肯定不会说跟进行迭代向前式的解析\。它是每当碰见一个\,然后把它跟后面一个字符当成一组,然后第3个跟第4个为一组求值。注意比较下面有没有双引号时的区别。
对比参考浅谈lisp与shell中转义字符和正则表达(二)
- 浅谈lisp与shell中转义字符和正则表达 (一)
- 浅谈lisp与shell中转义字符和正则表达 (二)
- shell-003 通配符 与 转义字符
- 转义字符\(在hive+shell以及java中注意事项):正则表达式的转义字符为双斜线,split函数解析也是正则
- 正则表达式之元字符与转义
- 元字符与转义(正则表达式)
- 元字符与转义(正则基本知识abc)
- Shell正则表达
- 正则表达式中特殊字符的转义
- 正则表达式中特殊字符的转义
- 在PHP中转义正则表达式字符
- 正则表达式中需要转义的字符
- 正则中需要转义的特殊字符
- shell中的通配符和转义字符
- Java转义字符和正则表达式
- java正则表达式和转义字符
- linux中转义字符以及通配符、shell特殊字符
- shell之转义字符
- 经典面试题--寻找01矩阵中最大的1矩形(POJ 3494)
- 2012 Multi-University Training Contest 7-1001 hdu4360 As long as Binbin loves Sangsang
- find / ls / grep /Emacs regexp 区别 及Meta
- 2012 Multi-University Training Contest 7-1003 hdu4362 Dragon Ball
- 三目运算符
- 浅谈lisp与shell中转义字符和正则表达 (一)
- 2 solution of java.lang.OutOfMemoryError in Java
- cocos2d-X学习之引擎源码目录结构介绍
- Http和Socket入门
- c的2个struct 互相引用的例子
- poj 2793 Cactus(无向仙人掌图判定)
- 沙盘Sandboxie 原理分析
- struts.xml常用常量配置
- SQL Server常用的全局变量