Regex 正则表达式将字符串结尾与通配符匹配

Regex 正则表达式将字符串结尾与通配符匹配,regex,Regex,我正在寻找一个正则表达式,它可以匹配长字符串除以分号,具有不同的模式,并且它们的结尾是通配符*。例如: abc-cd;efg-md*;abc:cde:fgh-ui*;jkl-{i*;uyz-12* 我写了这个正则表达式 (^|;)(([aA0-zZ9]+)|(\W+))-([aA0-zZ9]+\*) 但它只匹配;efg md*;abc:cde:fgh用户界面*;uyz-12*。它与不匹配;jkl-{i* 有人能为有效的正则表达式提供建议吗 但它只匹配;efg md*;abc:cde:fgh

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

abc-cd;efg-md*;abc:cde:fgh-ui*;jkl-{i*;uyz-12*
我写了这个正则表达式

(^|;)(([aA0-zZ9]+)|(\W+))-([aA0-zZ9]+\*)
但它只匹配
;efg md*;abc:cde:fgh用户界面*;uyz-12*
。它与
不匹配;jkl-{i*

有人能为有效的正则表达式提供建议吗

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

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

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

[^;]+\*(?=$|;)
详细信息

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

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

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

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

[^;]+\*(?=$|;)
详细信息

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

字符类
[aA0-zZ9]+
匹配
a
a
、范围从
0-z
z
9
中的一个

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

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

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

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


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

^[-0-9a-z+[*;:{]+\*$
  • ^
    字符串的开头
  • [-0-9a-z+[*;:{]+
    匹配列出的任何字符的1+倍
  • \*
    匹配
    *
  • $
    字符串结尾

字符类
[aA0-zZ9]+
匹配
a
a
、范围从
0-z
z
9
中的一个

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

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

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

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


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

^[-0-9a-z+[*;:{]+\*$
  • ^
    字符串的开头
  • [-0-9a-z+[*;:{]+
    匹配列出的任何字符的1+倍
  • \*
    匹配
    *
  • $
    字符串结尾

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

[^;]*\*

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

[^;]*\*

[aA0-zZ9]
不是你如何匹配所有字母和数字。它应该是
[a-zA-Z0-9]
[aA0-zZ9]
不是你如何匹配所有字母和数字。它应该是
[a-zA-Z0-9]
。感谢Than,它起了作用,但不幸的是,我使用的正则表达式不支持正向前瞻,有没有其他方法可以替代正向前瞻?您使用的正则表达式是什么?是kusto正则表达式,它使用re2库,我想您可以使用捕获组
([^;]+\*)($|;)
。使用
extract\u all
后,您可以选择所需的字符串。谢谢,它工作了,但不幸的是,我使用的正则表达式不支持正向前瞻,是否还有其他方法可以替代正向前瞻?您使用的正则表达式是什么?kusto正则表达式,它使用re2库,我认为您可以使用捕获组
([^;]+\*)($)
。使用
extract\u all
后,您可以选择所需的字符串。