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+[*;:{]+\*$
字符串的开头^
匹配列出的任何字符的1+倍[-0-9a-z+[*;:{]+
匹配\*
*
字符串结尾$
字符类
[aA0-zZ9]+
匹配a
、a
、范围从0-z
、z
或9
中的一个
范围0-z与中的48-122相匹配,并包括character类中列出的所有其他字符,因此无需添加它们
但正如您在ASCII表中所看到的,它不匹配字符,如*
{
和-
但是,我怀疑您打算使用[a-z0-9]+
并省略a-Z,因为示例字符串中没有大写字符
使用\W
确实匹配所有非单词字符,但在您尝试的模式中,后面应该跟有-
,这在示例数据中不匹配
要匹配以
*
结尾的字符串,可以扩展字符类:
^[-0-9a-z+[*;:{]+\*$
字符串的开头^
匹配列出的任何字符的1+倍[-0-9a-z+[*;:{]+
匹配\*
*
字符串结尾$
如果您的正则表达式风格不支持环顾断言,您可以如下更改正则表达式。
它搜索以
*
结尾的非分号字符序列
[^;]*\*
如果您的正则表达式风格不支持环顾断言,您可以如下更改正则表达式。
它搜索以
*
结尾的非分号字符序列
[^;]*\*
[aA0-zZ9]
不是你如何匹配所有字母和数字。它应该是[a-zA-Z0-9]
[aA0-zZ9]
不是你如何匹配所有字母和数字。它应该是[a-zA-Z0-9]
。感谢Than,它起了作用,但不幸的是,我使用的正则表达式不支持正向前瞻,有没有其他方法可以替代正向前瞻?您使用的正则表达式是什么?是kusto正则表达式,它使用re2库,我想您可以使用捕获组([^;]+\*)($|;)
。使用extract\u all
后,您可以选择所需的字符串。谢谢,它工作了,但不幸的是,我使用的正则表达式不支持正向前瞻,是否还有其他方法可以替代正向前瞻?您使用的正则表达式是什么?kusto正则表达式,它使用re2库,我认为您可以使用捕获组([^;]+\*)($)
。使用extract\u all
后,您可以选择所需的字符串。