^ 匹配一行的开始。例如正则表达式^When in能够匹配字符串"When in the course of human events"的开始,但是不能匹配"What and When in the" [] 匹配括号中的任何一个字符。例如正则表达式r[aou]t匹配rat、rot和rut,但是不匹配ret。可以在括号中使用连字符-来指定字符的区间,例如正则表达式[0-9]可以匹配任何数字字符;还可以制定多个区间,例如正则表达式[A-Za-z]可以匹配任何大小写字母。另一个重要的用法是“排除”,要想匹配除了指定区间之外的字符——也就是所谓的补集——在左边的括号和第一个字符之间使用^字符,例如正则表达式[^269A-Z] 将匹配除了2、6、9和所有大写字母之外的任何字符。
你看看给你的连接把。重新换一个措辞给你说一边,不如你直接看文章了。都有介绍的 (?<src>) 这叫命名分组 (?<src>aaa) 捕获aaa,创建堆栈保存分组信息,在结果:Match的Groups中可以用分组名访问到结果 Match m = Regex.Match("aaabbbccc","(?<src>aaa).+"); m.Value就是整体所有字符串 m.Groups[1].Value就是第一个分组aaa m.Groups["src"].Value也是第一个分组,因为你给第一个分组命名为src了,就可以这样访问。只有.net支持命名分组,js,php均不支持。 .net下的命名分组不只是为了好看,在(?n)的模式下,隐式分组(非命名分组)将被忽略,只认为是整体捕获,而不装入分组堆栈。 Match m = Regex.Match("aaabbbccc","(?n)(?<src>aaa)(bbb).+"); 这里依然只有分组src,后一个(bbb)被认为是整体捕获而不保存为分组捕获结果。还是那句话,囧 你看看给你的连接把。重新换一个措辞给你说一边,不如你直接看文章了。都有介绍的
例如有个字符串abcsefg
如果是^a 匹配后就只得到一个 a
如果是[^a]匹配后得到bcsefg在[^a]里的的意思是非a
然后如果没有在[]里的意思就是以a开头
是这个意思吗?还有帮我在解决下第一个问题
我说的正确吗?
谢谢大家不吝赐教
[] 匹配括号中的任何一个字符。例如正则表达式r[aou]t匹配rat、rot和rut,但是不匹配ret。可以在括号中使用连字符-来指定字符的区间,例如正则表达式[0-9]可以匹配任何数字字符;还可以制定多个区间,例如正则表达式[A-Za-z]可以匹配任何大小写字母。另一个重要的用法是“排除”,要想匹配除了指定区间之外的字符——也就是所谓的补集——在左边的括号和第一个字符之间使用^字符,例如正则表达式[^269A-Z] 将匹配除了2、6、9和所有大写字母之外的任何字符。
还有(?i)
为什么前面要个?号呢?
?不是匹配0次或1次,前面没有什么可以匹配的不是会错吗?
(?is):指定不区分大小写的匹配,指定单行模式
^在正则里的意思是以^开头还是是非的意思呢?
--------------------------------------------------------
(?ismn)表示模式
i:忽略大小写
s:单行模式,表示.可以匹配回车换行,^表示所有文本的开头
m:多行模式,.不可以匹配回车换行,^表示每行的开头
n:取消隐式分组,只有命名分组被认为是分组。不同请款不同意思的。在[]中间,表示反,[^a]表示a以外的任何都可以匹配。[^\d]为非数字的所有匹配。
^在[]外,表示段落开始,但并不一定是所有文本的头。
比如这样一段文本:afdafdas
fdasfda
fasfasfasfdasf
dasfasfasfda
sfasfdas^.+
将捕获afdafdas,因为^表示文本的开始,而afdafdas再往后,就有\r\n了,就不是字符不符合.了。
如果用单行模式
(?s)^.+
将捕获所有文本,.可以捕获回车换行以及其他所有字符,尽可能多的匹配(贪婪匹配)
(?m)^.+
将分别有5个捕获结果,每行都可以捕获。因为多行模式,^此时匹配行首,.不能匹配回车换行。更详细的你看过客的博客吧:
过客的博客或是过客层推荐的:
DEELX 正则表达式语法
为什么有的要在前面加个?号呢
例如(?<src>这样的,
为什么要在前面加个?号呢?
(?<src>)
这叫命名分组
(?<src>aaa)
捕获aaa,创建堆栈保存分组信息,在结果:Match的Groups中可以用分组名访问到结果
Match m = Regex.Match("aaabbbccc","(?<src>aaa).+");
m.Value就是整体所有字符串
m.Groups[1].Value就是第一个分组aaa
m.Groups["src"].Value也是第一个分组,因为你给第一个分组命名为src了,就可以这样访问。只有.net支持命名分组,js,php均不支持。
.net下的命名分组不只是为了好看,在(?n)的模式下,隐式分组(非命名分组)将被忽略,只认为是整体捕获,而不装入分组堆栈。
Match m = Regex.Match("aaabbbccc","(?n)(?<src>aaa)(bbb).+");
这里依然只有分组src,后一个(bbb)被认为是整体捕获而不保存为分组捕获结果。还是那句话,囧
你看看给你的连接把。重新换一个措辞给你说一边,不如你直接看文章了。都有介绍的