【问题标题】:Regex to match string endswith wildcard character正则表达式匹配字符串以通配符结尾
【发布时间】:2021-01-17 17:12:21
【问题描述】:

我正在寻找一个正则表达式,它可以匹配长字符串除以分号,具有不同的模式,它们以通配符* 结尾。例如:

abc-cd;efg-md*;abc:cde:fgh-ui*;jkl-{i*;uyz-12*

我写了这个正则表达式

(^|;)(([aA0-zZ9]+)|(\W+))-([aA0-zZ9]+\*)

但它只匹配;efg-md*;abc:cde:fgh-ui*;uyz-12*。它与;jkl-{i* 不匹配。

任何人都可以对有效的正则表达式提出建议

【问题讨论】:

  • [aA0-zZ9] 不是您匹配所有字母和数字的方式。应该是[a-zA-Z0-9]

标签: regex


【解决方案1】:

但它只匹配;efg-md*;abc:cde:fgh-ui*;uyz-12*。它与;jkl-{i* 不匹配。

因为;jkl-{i* 具有特殊字符{。你需要在你的正则表达式中接受{

另外,我有一个建议的解决方案。您可以尝试以下正则表达式。

[^;]+\*(?=$|;)

详情

  • [^;]+:匹配没有;的字符串
  • \*(?=$|;):如果* 的下一个字符是;end of line.,则匹配字符*

Demo

【讨论】:

【解决方案2】:

字符类[aA0-zZ9]+ 匹配aA 之一,范围为0-zZ9

范围 0-z 匹配 ASCII table 中的 48-122,并包括字符类中列出的所有其他字符,因此无需添加它们。

但正如您在 ASCII 表中看到的那样,它与 * {- 等字符不匹配

但我怀疑您的意思是使用 [a-z0-9]+ 并省略 A-Z,因为示例字符串中没有大写字符。

使用\W 确实匹配所有非单词字符,但在您尝试的模式中,它应该跟在示例数据中不匹配的-


要匹配以* 结尾的字符串,您可以扩展字符类:

^[-0-9a-z+[*;:{]+\*$
  • ^ 字符串开始
  • [-0-9a-z+[*;:{]+ 匹配任何列出的字符 1 次以上
  • \* 匹配 *
  • $字符串结束

Regex demo

【讨论】:

    【解决方案3】:

    如果您的正则表达式风格不支持环视断言,您可以如下更改正则表达式。
    它搜索以* 结尾的非分号字符序列。

    [^;]*?\*
    

    Demo

    【讨论】:

      猜你喜欢
      • 2016-03-26
      • 2015-08-01
      • 2015-09-28
      • 1970-01-01
      • 2011-09-23
      • 1970-01-01
      • 1970-01-01
      • 2016-12-07
      相关资源
      最近更新 更多