【讨论】正则表达式

【讨论】正则表达式

[quote=li-jiahuan]好像有一部分是Perl语法和RE吧.[/quote]
++++++++++++++++++++
[size=+1]楼主能解释一下:什么是Perl语法和RE吗?我正好学习一下。
另外,1
引用:
与glob比较:
当我们看到正则表达式时,您可能发现正则表达式的语法看起来与“文件名匹配替换”语法相类似。但是,不要让它欺骗您;它们的类似性只是表面的。虽然正则表达式和文件名匹配替换模式可能看上去相类似,但是它们是根本不同的两种类型。
在* ?  [ ] ! 的匹配替换应用中,何时用正则表达式的语法,何时用“文件名匹配替换”的语法?


2 在终端提示下输入 export  PS1=[\w]\$     后,提示符成为[w]$
再次输入 export  PS1='[\w]\$'  后,提示符才变为用户的当前绝对路径目录,是什么原因?
而输入 export  PS1=[\w]\$'  或者   export  PS1='[\w]\$  时,为什么 提示符变成了PS2类的> ?

这里用的也不是正则表达式??      
PS有几个特定的词法

quoted from bash'man
复制内容到剪贴板
代码:
PROMPTING
       When executing interactively, bash displays the primary prompt PS1 when it  is  ready  to
       read  a command, and the secondary prompt PS2 when it needs more input to complete a com┸
       mand.  Bash allows these prompt strings to be customized by inserting a number  of  back┸
       slash-escaped special characters that are decoded as follows:
              \a     an ASCII bell character (07)
              \d     the date in "Weekday Month Date" format (e.g., "Tue May 26")
              \D{format}
                     the  format  is  passed  to strftime(3) and the result is inserted into the
                     prompt string; an empty format results in a locale-specific time  represen┸
                     tation.  The braces are required
              \e     an ASCII escape character (033)
              \h     the hostname up to the first ‘.’
              \H     the hostname
              \j     the number of jobs currently managed by the shell
              \l     the basename of the shell’s terminal device name
              \n     newline
              \r     carriage return
              \s     the  name of the shell, the basename of $0 (the portion following the final
                     slash)
              \t     the current time in 24-hour HH:MM:SS format
              \T     the current time in 12-hour HH:MM:SS format
              \@     the current time in 12-hour am/pm format
              \A     the current time in 24-hour HH:MM format
              \u     the username of the current user
              \v     the version of bash (e.g., 2.00)
              \V     the release of bash, version + patch level (e.g., 2.00.0)
              \w     the current working directory, with $HOME abbreviated with a tilde
              \W     the basename of the current working directory, with $HOME abbreviated  with
                     a tilde
              \!     the history number of this command
              \#     the command number of this command
              \$     if the effective UID is 0, a #, otherwise a $
              \nnn   the character corresponding to the octal number nnn
              \\     a backslash
              \[     begin a sequence of non-printing characters, which could be used to embed a
                     terminal control sequence into the prompt
              \]     end a sequence of non-printing characters
      
多谢了,我从 quoted from bash'man 中 明白一点点,可惜我现在有许多看不太明白(没办法,上学时不肯学外文)。但我相信不久一定会学会的。

还是前面的问题,什么是Perl语法和RE以及正则表达式和文件名匹配替换模式它们的根本不同区别在哪里?为什么 在正则表达式中用单引号括起来后,元字符仍可匹配。而在glob模式或命令行中不进行匹配?
我这样问对不对?具体是如何规定的?有外文的也不错,可以补一下功课。

还有方括号的规则是什么 ?
引用:
注意下面一点很重要:方括号内部的语法根本不同于正则表达式其它部分中的语法。例如,如果在方括号内放置一个 . ,那么它允许方括号与文字 . 匹配,就象上面示例中的 1 和 2。比较起来,除非有 \ 作为前缀,否则方括号里面的文字 . 被解释为一个元字符
。      
1
Perl是一种编程语言(脚本?)

大家都知道不同的工具或语言对RE的支持程度不同
而且语法不尽一样
如sed,awk, C#,Perl等
据说Perl RE是最强大
以至于有些工具或语言以“支持Perl兼容正则表达式”为荣

也许楼上可以参考一下这本书Mastering_RegularExpressions
我自己还没怎么看,呵


2
对于文件名替换
我并不是很了解
也许文件名替换可以理解为一种很简单的RE
(当然,你也可以说他们两并不是一回事
看看*就知道,不过我无法解释,呵)

glob的参数一般是放在双引号中
在shell下,shell会进行替换(即glob)
而RE一般用单引号
以保证RE原原本本地传递给程序

欢迎更正与补充      
$ man bash

$ man 7 regex
$ man 3 regex
$ man grep
$ info gawk
$ info sed

$ man pcre
$ man perlrequick
$ man perlre
$ man perlretut      
[quote=li-jianhua]据说Perl RE是最强大
以至于有些工具或语言以“支持Perl兼容正则表达式”为荣[/quote] RE是regex(regexp)的缩写?
`````
[quote=li-jianhua]glob的参数一般是放在双引号中
在shell下,shell会进行替换(即glob)
而RE一般用单引号
以保证RE原原本本地传递给程序[/quote] 是不是说RE由程序解释后执行,而glob由shell解释后执行?
+++++++
不当之处,请多多指教。