正则表达式匹配字符串以通配符结尾
Posted
技术标签:
【中文标题】正则表达式匹配字符串以通配符结尾【英文标题】: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]
。
【参考方案1】:
但它只匹配
;efg-md*;abc:cde:fgh-ui*;uyz-12*
。它与;jkl-i*
不匹配。
因为;jkl-i*
具有特殊字符。你需要在你的正则表达式中接受
。
另外,我有一个建议的解决方案。您可以尝试以下正则表达式。
[^;]+\*(?=$|;)
详情:
[^;]+
:匹配没有;
的字符串
\*(?=$|;)
:如果*
的下一个字符是;
或end of line.
,则匹配字符*
Demo
【讨论】:
谢谢,它起作用了,但不幸的是,我使用的正则表达式不支持正前瞻,无论如何我可以用正前瞻代替吗? 你使用的是什么正则表达式? 是kusto正则表达式,使用re2库github.com/google/re2/wiki/Syntax 我认为您可以使用捕获组([^;]+\*)($|;)
解决问题。使用extract_all
后,你可以选择你想要的字符串。 docs.microsoft.com/vi-vn/azure/data-explorer/kusto/query/…【参考方案2】:
字符类[aA0-zZ9]+
匹配a
、A
之一,范围为0-z
、Z
或9
。
范围 0-z 匹配 ASCII table 中的 48-122,并包括字符类中列出的所有其他字符,因此无需添加它们。
但正如您在 ASCII 表中看到的那样,它与 *
和
-
等字符不匹配
但我怀疑您的意思是使用 [a-z0-9]+
并省略 A-Z,因为示例字符串中没有大写字符。
使用\W
确实匹配所有非单词字符,但在您尝试的模式中,它应该跟在示例数据中不匹配的-
。
要匹配以*
结尾的字符串,您可以扩展字符类:
^[-0-9a-z+[*;:]+\*$
^
字符串开始
[-0-9a-z+[*;:]+
匹配任何列出的字符 1 次以上
\*
匹配 *
$
字符串结束
Regex demo
【讨论】:
【参考方案3】:如果您的正则表达式风格不支持环视断言,您可以如下更改正则表达式。
它搜索以*
结尾的非分号字符序列。
[^;]*?\*
Demo
【讨论】:
以上是关于正则表达式匹配字符串以通配符结尾的主要内容,如果未能解决你的问题,请参考以下文章