【问题标题】:What regex will match every character except comma ',' or semi-colon ';'?什么正则表达式将匹配除逗号','或分号';'之外的每个字符?
【发布时间】:2023-03-20 04:07:01
【问题描述】:

是否可以定义一个匹配除某个已定义字符或字符集之外的每个字符的正则表达式?

基本上,我想用逗号 (,) 或分号 (;) 分割字符串。所以我正在考虑使用一个正则表达式来匹配所有内容,直到遇到逗号或分号。

【问题讨论】:

    标签: regex


    【解决方案1】:
    [^,;]+         
    

    您尚未指定正在使用的正则表达式实现。它们中的大多数都有一个Split 方法,该方法采用分隔符并由它们分割。您可能希望将其与“普通”(没有^)字符类一起使用:

    [,;]+
    

    【讨论】:

    • 而且问题没有指定是否允许相邻的分隔符,所以尾随的'+'有点可疑。
    • 只对分号出错——未终止的正则表达式遇到文件结尾
    • 我有一个类似的要求,我想在最后避免分号和逗号我尝试了很多但没有成功下面是我正在使用的正则表达式 const regexDomain = /^(?:[A-Za -z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\.)+[A-Za-z0-9][A- Za-z0-9-]{0,61}[A-Za-z0-9]/g;那么它验证我是否使用 , 和 ;介于两者之间,但最终无法 vliadate。
    【解决方案2】:

    使用字符类。以 caret 开头的字符类将匹配该类中没有的任何内容。

    [^,;]
    

    【讨论】:

    • 我有一个类似的要求,我想在最后避免分号和逗号我尝试了很多但下面没有成功是我正在使用的正则表达式 const regexDomain = /^(?:[A-Za -z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\.)+[A-Za-z0-9][A- Za-z0-9-]{0,61}[A-Za-z0-9]/g;好吧,它可以验证我是否使用 , 和 ;介于两者之间,但最终无法 vliadate。
    【解决方案3】:

    使用negative character class:

    [^,;]+
    

    【讨论】:

      【解决方案4】:

      使用这个:

      ([^,;]*[,;])*
      

      【讨论】:

      • 这需要逗号或分号作为字段分隔符,而不是作为字段分隔符。差异在“行”(或其他扫描的记录结构)的末尾很重要;通常,您不想在最后一个字段之后坚持使用逗号或分号。如果您的正则表达式引擎足够强大,您可以使用 '(?:([^,;]*)(?:[^,;]|$))'(带有非捕获括号的 PCRE)。在字段或记录结束后使用逗号或分号的替代方案可以使事情变得更好。还要考虑是否允许空字段。
      • 最后,您必须担心捕获实际返回的内容 - 您是否真的希望包含分隔符,如果一行中有 10 个字段,捕获返回的字段有多少符号。
      • 您对所有这些都是正确的,但我没有在回答中协调这些事情的原因是我不知道提问者问的是哪种语言/RegEx 库。他可能正在使用“GREP”。无论如何,我很感激你添加了这些 cmets 来为他解决问题。 :D
      猜你喜欢
      • 1970-01-01
      • 2011-09-02
      • 2011-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-31
      • 1970-01-01
      相关资源
      最近更新 更多