Regex 如何为它生成正则表达式?

Regex 如何为它生成正则表达式?,regex,regular-language,Regex,Regular Language,我想在字符串{{c1::tiger}上生成一个正则表达式 一种{c2::animal::something movable}}来获得单词“tiger”和“animal”,我做了这个表达式{c\d+::(?P.*?)(:{0,2})(.*?)(.*?)\},我还想用组('value')来实现这一点。结果单词“tiger”正是我所需要的,但总是得到错误的结果“animal::something movable”(我的意思是)“动物”),有人能帮我解决这个问题吗?谢谢。您尝试的模式包含4个捕获组,对于

我想在字符串{{c1::tiger}上生成一个正则表达式
一种{c2::animal::something movable}}来获得单词“tiger”和“animal”,我做了这个表达式
{c\d+::(?P.*?)(:{0,2})(.*?)(.*?)\}
,我还想用
组('value')
来实现这一点。结果单词“tiger”正是我所需要的,但总是得到错误的结果“animal::something movable”(我的意思是)“动物”),有人能帮我解决这个问题吗?谢谢。

您尝试的模式包含4个捕获组,对于当前示例,数据组1和组3为空

要获得
tiger
,您可以使用一个带有否定字符类的捕获组:

\{\{c\d+::(?P<value>.*?)(?:::|}})

您尝试的模式包含4个捕获组,对于当前示例,数据组1和组3为空

要获得
tiger
,您可以使用一个带有否定字符类的捕获组:

\{\{c\d+::(?P<value>.*?)(?:::|}})

这适用于您的示例字符串:

c1::(?P<valueTiger>[a-z]*).*?c2::(?P<valueAnimal>[a-z]*)
c1::(?P[a-z]*)。*c2:(?P[a-z]*))

这适用于您的示例字符串:

c1::(?P<valueTiger>[a-z]*).*?c2::(?P<valueAnimal>[a-z]*)
c1::(?P[a-z]*)。*c2:(?P[a-z]*))
\{c\d+:(?p[^:}]+)(?:{0,2}([^}]+)?\}
\{c\d+:(?p[^:}]+)(?:{0,2}([^}]+)?\}

单词“animal”如何?我使用了这个模式,但得到了错误的单词“animal::something movable”。@bmxbmx3当前模式在
组中得到tiger和animal。你的意思是这样的吗?
\{c\d+::(?p\S+)}
对不起,我没有注意到你修改了答案,你的答案正是我需要的。但是你能告诉我为什么我的正则表达式
{{c\d+:(?P.*?(:{0,2})(.*?)\}
是错误的吗?谢谢。你的模式中的这部分
(?P.*?(:{0,2})
使用了量词
*?
{0,2}
表示0+次和0-2次,因此0次也可以。然后最后一个组
(.*)
将匹配0+次非贪婪,直到它可以匹配最后一个
}
为止,并且模式
(?:::|})在您的正则表达式演示中是什么意思?特别是为什么要使用
?::
“动物”这个词呢“?我使用了这个模式,但得到了错误的单词“animal::something movable”。@bmxbmx3当前模式在
组中得到tiger和animal。你的意思是这样的吗?
{c\d+::(?P\S+}}}
对不起,我没有注意到你修改了答案,你的答案是我需要的。但是你能告诉我为什么我的正则表达式
\{c\d+:(?-P.*?(:{0,2})(.*?)\}
是错误的吗?谢谢。模式中的这部分
(?-P.*?(:{0,2})
使用量词
*?
{0,2}
表示0+次和0-2次,因此0次也可以。然后最后一组
将匹配0+次,直到它可以匹配最后一组
)}
在您的正则表达式演示中,模式
(?::|}})是什么意思?特别是为什么要使用
?: