一个正则表达式看不懂了,求指教
2014-02-27 10:52
92 查看
问题,这是我看的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
//解析普通变量{}
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
相关文章推荐
- 一个匹配4个数字和4个字母密码的正则表达式
- grep -- 一个正则表达式的执行者
- 一个严格区配IP的正则表达式
- ios 一个正则表达式测试(只可输入中文、字母和数字)
- 正则表达式,一个十分古老而又强大的文本处理工具
- 将一个字符串中的多个连在一起的空格变成单个空格 Java 正则表达式
- 现在正在写一个搜索功能代码 需要用到正则表达式
- 一个java正则表达式的case以及学习链接
- 一个简单的例子区分linux shell 正则表达式中的 *,+,?
- 转一个正则表达式的工具,很好用.
- 如何中断一个长时间运行的”无限”Java正则表达式
- 【每天一个Linux命令】17. 强大的文件搜索工具grep&&正则表达式
- 输入一个Email地址,然后使用正则表达式验证该Email地址是否正确。
- 编写正则表达式,判断给定的是否是一个合法的IP地址。
- C#正则表达式基础 [A-Z]验证一个字符是否是大写字母
- Javascript lastIndex 正则表达式的一个疑惑
- 利用正则表达式判断一个字符串是否为数字
- 正则表达式入门教程(写的相当好,保证看完后对正则表达式有一个全面的认识)
- 复习正则表达式时的一个小知识点
- 一个关于正则表达式的疑问