正则表达式中的$>符号

3
/\/\*[ \t]*\./ /import/i /[ \t\w\/\.\=\-;\[\]\$>"']+\*\/[ \t]*[\n\r]{1,2}/

在上面的正则表达式中,我不知道[ \t\w\/\.\=\-;\[\]\$>"']+代表什么类型的数据语法。
有人能举个例子来解释一下吗?


1
这是一个字符类(character class),它可以简化为 [ \t\w\[\]/.=;$>"'-]+ - Robin
\$> 匹配字面上的 $> 以及其他字符和类。 - mpapec
2个回答

4
你的角色位于角色类中,这意味着...
[ \t\w\/\.\=\-;\[\]\$>"']+     

任意一个字符:

  • ' '(空格)、\t(制表符)
  • 单词字符(a-zA-Z0-9_
  • \/\.\=\-;\[\]\$>"'
  • (出现 1 次或以上

在正则表达式中,需要直接解释而非作为元字符的字符可以通过在它们前面加上反斜杠符号 (\) 进行转义。因此,如果您想在正则表达式中将这些字符用作字面值,则需要使用反斜杠进行转义
对于 PCRE 和大多数其他 Perl 兼容的风格,需要在字符类内部转义这些字符:
^]\-

并在字符类之外转义这些:

^.*+?$|()[{\

注意:如果连字符被认为是字符类内范围的第一个或最后一个字符,则不一定需要转义。
所以基本上,这可以简化为以下内容。
[ \t\w\/.=;[\]$>"'-]+

我对正则表达式很陌生,请清楚地解释一下字符类内部或外部转义字符的含义。先行谢过。 - user3655447

0
转义一个字符意味着不使用它的常规角色,而是使用它的特殊角色(如果有的话)。 例如,字母“w”的常规角色是字符类内外的简单字符“w”。 如果在字符"w"之前加上\字符进行转义,\w 将具有特殊角色,表示字符类内外的任何"word"字符(字母、数字和下划线字符)。 字符"]"的常规角色不是简单的字符"]",而是结束字符类的角色。 如果在字符"]"之前加上\进行转义,] 将具有特殊角色,在字符类内外表示一个简单的"]"字符。

在字符类外部,一些字符(如"$"、"*"、"?"、"+")除了作为普通字符之外,还有其他的作用。所以,当你想要指定一个加号符号时,你需要使用"+"进行转义,因为否则它的常见角色将是表示"前一个字符出现一次或多次"。 然而,在字符类内部,一些字符始终被用作普通字符,所以它们不需要进行转义。因此,例如,在字符类中,你不需要使用\= * + \?,只需要使用= * + ?。 然而,在字符类内部,你需要转义一些字符,如"]",否则它将被视为字符类的结束。 你还需要转义字符"-",否则它将不被视为简单的破折号,而是会创建前一个字符和后一个字符之间的范围。 另一种方法是始终将"-"字符放置在字符类的第一个或最后一个字符位置,这种情况下它不需要被转义。

看起来可能很复杂,但实际上并不是。 你需要逻辑思考。如果在字符类中出现“+”字符而不进行转义会发生什么?它是否意味着前一个字符可能出现一次或多次?在字符类中这样的事情没有任何意义,所以你不需要对其进行转义。等号“=”在字符类内外都没有特殊作用,因此你也不需要对其进行转义。 简单的点号“.”在字符类外表示任何字符但不包括\n(除非使用/s修饰符),但在字符类中其常见含义是作为一个简单的点号(.),因此你也不需要对其进行转义。 这些并不是关于所有字符的常见和特殊含义的所有细节,但我只是举了这些例子来说明转义的含义。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接