正则表达式非贪婪模式

正则表达式:(?![wwk])[^\s]*?(?=‘)
字符串:"wwkeeeooekiikoeji’,eeillie’,ddee’,www’,eee’,eee’,eee’,
测试结果: eeeooekiikoeji

解释:?![wwk] 去掉字符串 wwk
?(?=') 非贪婪 从字符串 ‘ 截断

json 正则表达式参考:{(.)*?}

div 属性 data-text-as-pseudo-element
Regex regex = new Regex(@“<div\s+data-text-as-pseudo-element\s*=\s*”“((?!0|+|#)[“”]+)“”(?!.*title=\s*“”\d+“”)[>]>");
Regex regex = new Regex(@"data-text-as-pseudo-element\s
=\s*'“”['”“]”);

//=====================
匹配特殊网址:
https://login.live.com/GetCredentialType.srf?opid=[^\s]*?(?=')

https://login.live.com/GetCredentialType.srf?opid=[^\s]*?(?=')

string pattern = @“https://login.live.com/GetCredentialType.srf?opid=[^\s]*?(?=')”;

匹配cookie格式:
(?![httponly,|httponly])(\S*?)=(.*?)(?:;|$)
cookie字符串 .AspNetCore.OpenIdConnect.Nonce.CfDJ8KGo7ow5TSlPoCeaMBiPrMiHj4ZKoRGrzFc9tcuWXy4CUsAUltwLtwkNbgxSrdihUVnIiMmKyOaaHhBIpsYQFrcmZJpl6lhFKBKN0igDDb12J1jiHAexApGmKTPXg2wy0Ou30YVR05Z7NqaCdqKQ-kWRMQ3FSKkS8mLBNUb-hs299FEUxBcrYseJhBzTTgu_-XheWOYN6AHWUiMi_XiIn9f0HXIVn3-ltsPA1KCx7rpWOLG5WDb-Lww9vWEikvPTcN4x-wtY314DxroTluT5nEo=N; expires=Wed, 26 May 2021 03:02:57 GMT; path=/signin-oidc; secure; samesite=none; httponly,.AspNetCore.Correlation.DbJyQE2nNKGpzOSK98nQZlW6xDy-ErQyNFBlHuBOLl0=N; expires=Wed, 26 May 2021 03:02:57 GMT; path=/signin-oidc; secure; samesite=none; httponly

用中文解释 \{(?:[^{}]|(?R))*\}

这个正则表达式可以用来匹配一对花括号 {} 包裹的内容,其中可以包含任意字符,甚至可以嵌套其他的花括号。让我们逐步解释这个正则表达式的各个部分:

\{ 和 \}: 匹配实际的左花括号和右花括号。
(?: ... ): 这是一个非捕获型的分组,用来组合一系列子表达式。
[^{}]: 匹配任意除了左花括号和右花括号之外的字符。
|: 或的意思,可以让正则表达式匹配两个子表达式中的任意一个。
(?R): 这是一个递归的表达式,它会在这里嵌套整个正则表达式本身的内容,允许匹配嵌套的花括号结构。
*: 表示前面的表达式可以重复出现零次或多次,这允许匹配更复杂的嵌套结构。
综合起来,这个正则表达式可以匹配形如 {...} 的字符串,其中的{...}内部可以包含任意字符,甚至可以嵌套其他的花括号结构。然而,这个表达式仍然不能处理所有可能的情况,因为 JSON 语法非常灵活复杂,强烈建议使用专门的 JSON 解析器来处理 JSON 数据。


用中文解释 正则表达式   \{(?:[^\{\}]|(?<o>\{)|(?<-o>\}))+(?(o)(?!))\} 

这个正则表达式的模式用于匹配一对儿花括号 {} 包裹起来的内容。让我们一步步来解释它:

\{ 和 \}:匹配实际的左花括号和右花括号。

(?: ... ):这是一个非捕获型分组,意味着其中的匹配不会被提取为捕获组。它用于对花括号中间的内容进行整体分组。

[^\{\}]:这是一个字符类,用于匹配除了左花括号和右花括号之外的任何字符。

|:表示逻辑或,用于在不同的匹配选项之间进行选择。

(?<o>\{):这是一个捕获组,通过命名捕获组 "o" 来匹配左花括号。遇到一个左花括号时,它会将一个匹配存储到 "o" 这个捕获组中。

(?<-o>\}):这也是一个捕获组,通过命名捕获组 "o" 来匹配右花括号。不过,它是在 "o" 这个捕获组的堆栈上弹出一个匹配。这就确保了每个右花括号都与之前遇到的左花括号相匹配。

+:表示前面的表达式可以连续匹配多次。

(?(o)(?!)):这是一个零宽度正向否定预查,用于在匹配结束后,检查捕获组 "o" 是否为空。如果捕获组 "o" 不为空(意味着左花括号多于右花括号),则整个匹配失败。

因此,这个正则表达式模式的目的是匹配一对儿花括号 {} 包裹起来的内容,并且确保花括号是正确配对的。请注意,这个模式相对复杂,更多用于高级的正则表达式应用。
//匹配2-3个英文数字
\b(one|two|three|four|five|six|seven|eight|nine|zero)\b(?:\s+\b(one|two|three|four|five|six|seven|eight|nine|zero)\b){1,2}

正则连续数字

using System;
using System.Text.RegularExpressions;

namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string input = "135234578456";
            // 正则表达式匹配连续3位递增或递减数字
            string pattern = @"(?=(\d{3}))";

            MatchCollection matches = Regex.Matches(input, pattern);

            foreach (Match match in matches)
            {
                string value = match.Groups[1].Value;
                if (IsSequential(value))
                {
                    Console.WriteLine(value);
                }
            }
            Console.Read();
        }
        // 检查是否为顺序号
        static bool IsSequential(string str)
        {
            if (str.Length < 3) return false;

            bool ascending = true;
            bool descending = true;

            for (int i = 0; i < str.Length - 1; i++)
            {

                if (str[i] + 1 != str[i + 1])
                {
                    ascending = false;
                }
                if (str[i] - 1 != str[i + 1])
                {
                    descending = false;
                }
            }
            return ascending || descending;
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值