【问题标题】:Some more regex criteria in existing regex现有正则表达式中的更多正则表达式标准
【发布时间】:2019-11-19 09:09:54
【问题描述】:

我想添加到下面的正则表达式中,它也通过以下条件 -

^[\p{L}\d'][ \p{L}\d'-]*[\p{L}\d'-']$
  1. 只能以字母(A-Z 或 a-z)开头。
  2. 也可以只接受单个字母。
  3. 在字符串之间或字符串结尾处接受连字符 (-)、空格、点 (.)。 (无其他特殊字符)
  4. 接受字符串之间和结尾之间的数字。

请还希望达到此正则表达式正在执行的现有标准。

例如

预期 -

t, T, test, test123, te12st, te-st, te.st, te st, éééééé, ṪỲɎɆḂɃɀȿȸȺȔȐȳɊÉâÇë, Επίθετο

没有预期 -

12test, 1, .test, -test, , tes*t (none of the special character except hyphen, dot & space),  

【问题讨论】:

  • ^\\p{L}[ \\p{L}\\d.-]*$
  • 要解决要点#1,您需要^[A-za-z]{1}[\\p{L}\\d'][ \\p{L}\\d'-]*[\\p{L}\\d'-']$
  • 你能提供一个示例输入和预期的匹配吗?
  • @MonkeyZeus,我已经用预期匹配更新​​了这个问题。
  • ṪỲɎɆḂɃɀȿȸȺȔȐȳɊÉâÇë 的有效性如何?它不适合您提供的正则表达式,也不适合您发布的要求。

标签: java regex


【解决方案1】:

要匹配包含单个字母的预期而非预期,您可以从字符串的开头匹配\pL。然后重复 0+ 次 [\d\pL .-] 中列出的任何内容,然后断言字符串的结尾。

请注意,并非所有预期都以 a-zA-Z 开头。

^\pL[\d\pL .-]*$

在 Java 中

String regex = "^\\pL[\\d\\pL .-]*$";

Regex demo | Java demo

【讨论】:

    【解决方案2】:
    ^[A-Za-z]+[\p{L}\d-.\s]*$
    

    这是一个可能的解决方案,但是这些测试标准与您的第一个要求相冲突:ééééééé、ṪỲɎɆḂɃɀȿȸȺȔȐȳɊÉâÇë、Επίθετο。其中 1) 接受一个或多个 A-Za-z 然后 2) 零个或多个字母、数字、连字符、空格和句点的组合。

    如果您希望它也接受这三个测试标准,那么这是一个可能的解决方案:

    ^[\p{L}]+[\p{L}\d-.\s]*$
    

    【讨论】:

      猜你喜欢
      • 2011-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多