0 regex
当我学习正则表达式时,我了解到它们应该以斜杠字符开头和结尾(后跟修饰符).
例如/ dog/i
但是,在许多示例中,我看到它们以其他字符开头和结尾,例如@,#和|.
例如| dog |
有什么不同?
这种情况从一种正则表达式风味到下一种都有很大差异.例如,JavaScript只允许使用正斜杠(或solidus)作为正则表达式文字的分隔符,但在Perl中,您可以使用任何标点符号 - 在更新版本中,包括非ASCII字符,如«和».当您使用平衡对中的字符(如大括号,圆括号或上面的双箭头引号)时,它们必须正确平衡:
m«\d+»
s{foo}{bar}
Run Code Online (Sandbox Code Playgroud)
如果使用%r前缀,Ruby还允许您选择不同的分隔符,但我不知道是否扩展到平衡分隔符或非ASCII字符.许多语言根本不支持正则表达式文字; 你只需将正则表达式写为字符串文字,例如:
r'\d+' // Python
@"\d+" // C#
"\\d+" // Java
Run Code Online (Sandbox Code Playgroud)
请注意Java版本中的双反斜杠.这是必要的,因为字符串被处理两次:一次是Java编译器,一次compile()是Pattern类的方法.大多数其他语言提供了字符串文字的"原始"或"逐字"形式,这些形式几乎消除了这种反斜杠.
然后是PHP.它的preg正则表达式函数建立在PCRE库之上,它模仿Perl的正则表达式,包括各种各样的分隔符.但是,PHP本身不支持正则表达式文字,因此您必须将它们编写为嵌入字符串文字中的正则表达式文字,如下所示:
'/\d+/g' // match modifiers go after the slash but inside the quotes
"{\\d+}" // double-quotes may or may not require double backslashes
Run Code Online (Sandbox Code Playgroud)
最后,请注意,即使那些支持正则表达式文字的语言通常也不提供像Perl的s/…/…/构造.最接近的等价函数是一个函数调用,它将正则表达式文字作为第一个参数,将字符串文字作为第二个参数,如下所示:
s = s.replace(/foo/i, 'bar') // JavaScript
s.gsub!(/foo/i, "bar") // Ruby
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
334 次 |
| 最近记录: |