Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 跨平台共享正则表达式模式_Regex_Cross Platform - Fatal编程技术网

Regex 跨平台共享正则表达式模式

Regex 跨平台共享正则表达式模式,regex,cross-platform,Regex,Cross Platform,我们正试图在多个平台(应用程序(Android/iOS)、Web(javascript)和后端服务(C#)上共享我们的正则表达式模式 我遇到的一个问题是,所有平台都有不同的正则表达式引擎。可能导致其中一个错误地处理regexp模式 regex模式最初在C#中定义,然后通过Webservice或Bower向其他平台公开。是否需要为模式编写单元测试以确保它在其他平台上工作 我问这个问题的原因是因为我假设有一种通用的正则表达式语言,每个引擎都有自己独特的特性。如果是这样的话,应该可以验证每个模式是否符

我们正试图在多个平台(应用程序(Android/iOS)、Web(javascript)和后端服务(C#)上共享我们的正则表达式模式

我遇到的一个问题是,所有平台都有不同的正则表达式引擎。可能导致其中一个错误地处理regexp模式

regex模式最初在C#中定义,然后通过Webservice或Bower向其他平台公开。是否需要为模式编写单元测试以确保它在其他平台上工作


我问这个问题的原因是因为我假设有一种通用的正则表达式语言,每个引擎都有自己独特的特性。如果是这样的话,应该可以验证每个模式是否符合通常理解的语言。

我建议选择支持最少regex功能的标准作为基础标准,即Javascript

也就是说,列出了JavaScript中可用的内容:

  • 仅支持
    g
    i
    m
    标志,不支持内联标志
  • 反斜杠在JavaScript中转义
  • 使用
    [\s\s]
  • \A
    \Z
    锚定以匹配字符串的开头或结尾。使用插入符号或美元代替
  • 根本不支持Lookbehind。完全支持前瞻
  • 没有原子分组或所有格量词
  • 不支持Unicode,但将单个字符与
    \uFFFF
    匹配除外
  • 没有命名的捕获组。改为使用编号的捕获组
  • 没有模式修饰符来设置正则表达式中的匹配选项
  • 没有条件
  • 没有正则表达式注释。改为在正则表达式字符串之外使用JavaScript
    /
    注释描述正则表达式
另外,在字符类中使用明确的转义(即对于
-
]
[
字符,主要是必须转义以避免混淆)

请注意,在Java正则表达式字符串中,反斜杠必须进行双转义


正如@nhahdth所提到的,避免使用速记类,而是使用字符类。
\w
在不需要的情况下匹配Unicode字母时,可能会成为真正的罪魁祸首,而且只要提到需要
[a-zA-Z0-9]就可以了
相反。

要注意不同口味之间的差异。
\w
\s
\d
。在C#中,速记
\w
\d
识别Unicode字符,而在JavaScript中,
\w
\d
仅匹配ASCII字符。