一个正则表达式看不懂了,求指教

问题,这是我看的dtcms的模板引擎制作的内容,在csdn问的问题及解答

 //解析普通变量{}
            r[15] = new Regex(@"({([^\[\]/\{\}=:'\s]+)})", options);
就是这个({([^\[\]/\{\}=:'\s]+)}),小括号表示分组吧,小括号里又套了个大括号什么意思,大括号如果里面有数值,比如{3},我知道重复3次,除非\{\},表示{}原样输出匹配,可以大括号里又套了个小括号(),小括号里\表示转义吧,我看应该匹配除了[]/{}=:'以及一个以上空白,除了上面的那些符号外其他都匹配,
match遍历符合条件的内容,最后match.Groups[0].ToString()
匹配了个{model.title},这是怎么回事啊,外边的大括号怎么匹配的啊

match.Groups[0]是 输出匹配到的整个字符串 比如: {model.title},(//我的补充,这里更明白一点,我的项目比如r[0] = new Regex(@"<%template src=/([^\[\]\{\}\s]+)/%>", options);,groups[0],就是整个(@"<%template src=/([^\[\]\{\}\s]+)/%>“,而groups[1]是小括号的内容即[^\[\]\{\}\s]+)/%)

match.Groups[1]: 是外边的小括号内的值: {model.title}

match.Groups[2]: 是里边的小括号内的值: model.title

你的正则,外边的小括号是没必要的

整个正则的意思是:  匹配这样的字符: 外边是{},里边是非[]{}=:'空格的字符 

 

 

恕我不能理解你看完这篇文章还来发贴的理由,这些都是最最基本的好吗、、、
言归正传,我们来讨论下这个pattern是来匹配什么类型的。
\[ 匹配字符[
\] 匹配字符]
/ 匹配字符/
\{ 匹配字符{
\} 匹配字符}
= 匹配字符=
: 匹配字符:
' 匹配字符'
\s 匹配任意的空白符
[^aeiou]匹配除了aeiou这几个字母以外的任意字符
+  重复一次或更多次
[^\[\]/\{\}=:'\s]+   匹配长度至少为1的符合这个[^\[\]/\{\}=:'\s]要求的字符串
(exp) 匹配exp,并捕获文本到自动命名的组里
([^\[\]/\{\}=:'\s]+) 匹配[^\[\]/\{\}=:'\s]+,并捕获文本到自动命名的组里
比如string为 1qww fsf{dfla}fl=d 
那么匹配结果为5个分组,分别为1qww fsf dfla fl d
 
{}在这里并没有什么特别的意义。就是两个字符而已。
(exp) 匹配exp,并捕获文本到自动命名的组里
({([^\[\]/\{\}=:'\s]+)})
比如string为 1qww fsf{dfla}fl=d 
那么匹配结果为1个分组,为 dfla

这样分析,你看懂了么?

 

 

TZ,你说了一大串,但是显然,你想多了

首先,来说一下这个正则所匹配的:
匹配以{开头以}结尾的字符串,中间必须有1个或1个以上的字符,并且字符不能为以下任意一个值:
 [ ] / { } = : 空白

也就是匹配这种字符串: {abc123}
其次,说一下里面的分组:
$1 是整个匹配的分组,也就是{abc123}
$2 是花括号内的分组,也就是abc123

 

 

好像有点明白了,也就是({()}),小括号里的匹配内容为{},这是分组0匹配,如果这个大括号里又有小括号,那么又是一组,也就是()里的内容匹配分组1是吧,,如果大括号里没有小括号,那么只有一组,那就是匹配{}里的内容是吧

 

其实,就是小括号里匹配一个分组1,如果分组里还有小括号,那就是分组2

转载于:https://www.cnblogs.com/wanshutao/p/3570982.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 正则表达式是一种用于处理字符串的工具,但它的语法比较复杂,可能会让人感到困惑。如果你看不懂正则表达式,可以尝试以下方法: 1. 学习正则表达式语法:可以通过书籍、网上教程等途径学习正则表达式的语法规则,掌握基本的语法结构。 2. 使用正则表达式工具:可以使用一些正则表达式工具,如Regex101、RegExr等,输入你想要匹配的字符串和表达式,这些工具会将匹配的结果高亮显示,帮助你理解正则表达式的作用。 3. 练习:多练习使用正则表达式,尝试匹配不同的字符串,熟悉了解正则表达式的使用场景。 4. 借助其他工具:有些编程语言或软件包提供了对正则表达式的支持,可以尝试使用这些工具,结合文档学习正则表达式的使用方法。 综上所述,学习正则表达式需要耐心和实践,通过不断尝试和学习,你将能够掌握这一有用的工具。 ### 回答2: 对于不懂正则表达式的人来说,可以采取以下几种方法来解决这个问题。 首先,可以从理论知识入手,了解正则表达式的基本原理和语法规则。可以参考一些权威教程或者书籍,例如《正则表达式必知必会》等。通过系统地学习正则表达式的知识,掌握常用的元字符、字符类和量词等,可以更好地理解和应用正则表达式。 其次,可以借助在线工具和软件来帮助理解和测试正则表达式。许多在线正则表达式测试工具(如 Regex101、Regexr 等)提供了可视化的界面,可以输入正则表达式和测试字符串进行实时匹配和验证,帮助用户实际运用和观察正则表达式的匹配结果,从而更好地理解其工作原理。 另外,还可以寻专业人士或经验丰富的开发者的帮助。可以在相关的技术社区或论坛上提问,与其他人交流和讨论,分享自己的疑惑和遇到的问题,从他人的经验和解答中获得帮助。也可以积极参与开源项目,从实践中积累经验,逐渐提高自己对正则表达式的理解和运用能力。 最后,通过实际的练习和实践来加深对正则表达式的理解。尝试编写一些简单的正则表达式,并在实际的文本匹配或替换中测试其效果。通过不断的实践和调试,逐步加深对正则表达式的理解和熟练度。 总之,正则表达式是一项强大且灵活的文本处理工具,虽然初期理解和掌握可能会有一定难度,但通过适当的学习、实践和寻帮助,相信任何人都能够逐渐掌握和应用正则表达式。 ### 回答3: 正则表达式可以在文本处理和模式匹配方面提供很强大的功能。如果你对正则表达式感到困惑,可以考虑以下几个方法来帮助你理解和掌握它们。 1. 学习基础知识:首先,你可以通过阅读相关的教程和学习材料,了解正则表达式的基础语法和常用的元字符和操作符。掌握这些基础知识将有助于你更好地理解正则表达式的工作原理。 2. 练习实例:可以通过尝试一些简单的实例来练习你的正则表达式技能。从一个简单的模式开始,比如匹配一个特定的单词或字符,并逐渐增加复杂度。逐步练习和实践将有助于你发展对正则表达式的理解和掌握。 3. 使用在线工具:有很多在线的正则表达式测试工具可以帮助你验证和调试你的模式。这些工具通常提供实时的结果反馈和错误提示,能够帮助你更好地理解正则表达式的匹配过程和结果。 4. 参考文档和社区:如果你在使用正则表达式时遇到了困惑或问题,可以查阅相关的文档和参考资料。网络上有很多关于正则表达式的详细说明和示例,以及相应的社区和论坛,可以帮助你解决疑惑和获取技术支持。 5. 寻帮助:如果你尝试了以上方法仍然无法理解正则表达式,可以寻其他人的帮助。你可以向你认识的开发者或技术专家请教,或者在技术论坛上提问。他们可能会提供一些实际问题的解答和指导,帮助你更好地理解和应用正则表达式

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值