
参考: ;
;
;
原始符号
是因为?如果要匹配,在正则表达式中有特殊含义吗?本身,您需要逃脱,\?
有量词
问号可能意味着重复先前的内容0次或一次,即它不出现或出现一次.
非贪婪匹配
贪婪匹配
满足匹配条件后,请尽可能长地匹配字符串. 默认情况下,使用贪婪匹配
string pattern1 = @"a.*c"; // greedy match

Regex regex = new Regex(pattern1);
regex.Match("abcabc"); // return "abcabc"
非贪婪匹配
满足匹配条件后,匹配尽可能短的字符串,使用吗?表示非贪婪匹配
string pattern1 = @"a.*?c";
// non-greedy match Regex regex = new Regex(pattern1);
regex.Match("abcabc"); // return "abc"
几个常用的非贪婪匹配Pattern
*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复
不捕捉模式
如何关闭括号的捕获功能?并通过添加: ?将其用于分组. 在左括号之后,这里的第一个括号仅用于分组,并且不占用捕获变量,因此$ 1的内容只能是牛排或汉堡,而不能是bronto.
同时(<>){

if(/(?: bronto)(牛排|汉堡)/){
打印“弗雷德想要$ 1 \ n”;
}
}
非捕获括号的详细介绍
我们已经知道括号可以捕获匹配的字符串并将其存储在变量中. 如果我们只想使用括号对某些部分进行分组怎么办?考虑这样一个正则表达式: 仅希望将括号中的匹配内容的一部分存储在内存变量中. 在下面的示例中,我们希望“ bronto”是可选的,为了使其可选正则表达式匹配问号,我们需要将其括在括号中. 然后,该模式使用一种模式来获取“牛排”或“汉堡”,并将匹配的字符串存储在一个内存变量中.
如果(/(bronto)?saurus(牛排|汉堡)/)
{
打印“弗雷德想要$ 2 \ n”;
}
即使“ bronto”不匹配,$ 1仍将存入此部分. Perl计算括号内的变量来命名这些变量. 我们需要的部分存入$2. 当模式变得复杂时,情况变得非常复杂.

幸运的是,Perl的正则表达式可以使圆括号仅成为组,而不会导致分配内存变量. 我们称其为非捕获括号,并且有一种特殊的编写方式. 我们在圆括号(?:)◆后面添加一个问号和一个冒号,其功能是告诉Perl括号仅用于分组.
◆这是第四用法吗?在正则表达式中签名: 问号,表示0或1的量词,非贪婪的修饰符,现在是开始字符 p>
更改上面的正则表达式,使它成为“ bronto”的不包含括号,并且我们需要的部分存储在变量$ 1中.
如果(/(?(bronto)?saurus(牛排|汉堡)/)
{
打印“弗雷德想要$ 1 \ n”;
}
如果将来需要更改正则表达式,例如在雷龙汉堡中添加烧烤,我们可以添加“ BBQ”(包括空格),并使括号不被捕获,然后对应于各部分的内存变量我们仍然需要$ 1. 否则,每次在正则表达式中添加括号时,都需要更改内存变量名称.
如果(/(?: bronto)?saurus(?: BBQ)?(牛排|汉堡)/)
{
打印“弗雷德想要$ 1 \ n”;

}
可预见的比赛
简而言之,这意味着在比赛期间会考虑可预见比赛的一部分. 如果不匹配,则不能将其视为匹配项,但是匹配项的结果部分(变量$&)将分为两部分.
1可以预见匹配/模式(?=字符串)/;匹配时,请考虑匹配字符串
会议功能“?=”正则表达式匹配问号,意识表明目标字符串中必须包含某些内容,例如:
varstr =“ ab4”;
varreg = / ab(?= \ d)/ g
警报(reg.test(str)); //结果为true,表示第三个数字必须为数字;
2否预见性匹配/模式(?!字符串)/;匹配时,必须考虑那些不匹配字符串的字符串. 结果,$&仍然只包含模式部分,不包括字符串
“ ?!”,这意味着目标字符串中不应包含任何内容
varstr =“ ab1”;
varreg = / ab(?!\ d)/ g
警报(reg.test(str)); //结果为假
意味着目标字符串中的第三位数字不应是数字.
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-227009-1.html
祖宗留给我们的江海疆土绝不容侵犯
嫖娼