java中文和半角符号 正则 正则表达式半角符号_字符串

任意字符: [\s\S]*

匹配空格 ,有3种:

半角空格' ',匹配代码:【\x{0020}】或者【\x20】
全角空格' ',匹配代码:【\x{3000}】
同时匹配全半角:[\x{0020}|\x{3000}]
空格占位符' ',匹配代码:【\x{00a0}】

匹配转义字符,

如果需要用它们的原始意义,则应该对它进行转义,

'\'、'?'、'*'、'^'、'$'、'+'、'('、')'、'|'、'{'、'['
'\\'   匹配字符'\'
\"     双引号,匹配字符"
\'     单引号,匹配字符'
'\.'   匹配字符'.',在正则中表示.的时候都是\.
'\?'   匹配字符'?'
'\*'   匹配字符'*'
'\^'   匹配字符'^'
'\$'   匹配字符'$'
'\+'   匹配字符'+'
'\('   匹配字符'('
'\)'   匹配字符')'
'\|'   匹配字符'|'
'\{'   匹配字符'{'
'\}'   匹配字符'}'
'\['   匹配字符'['
'\]'   匹配字符']'

不可见字符 非打印字符
\r      匹配字符回车
\n      匹配字符新行
\a	    警报(ANSI C)
\b	    退格
\f	    换页
\t	    水平制表符,tab键
\v	    垂直制表符

匹配编码

\nnn   匹配一个8进制ASCII
\xnn   匹配一个16进制ASCII
\unnnn \u{xxxx}、\x{xxxx} 匹配4个16进制的Uniode

匹配ASCII码表范围内字符:[\x00-\x7f]
匹配非ASCII码表范围内字符:[^\x00-\x7f]
匹配中文字符:[\u4e00-\u9fa5]
匹配非中文字符:[^\u4e00-\u9fa5]

匹配空行 空白行 换行符

单行空行(包括空白字符行):^\s*\n
多行空行(包括空白字符行):\s*\n
匹配只有两个字的行: ^..$

string pattern = @"^\s*\n";   //空行,包括空白字符行
string pattern = @"\s*\n";    //换行符
匹配只有两个字的行: ^..$

范围匹配

x 开头 z 结尾的 提取中间范围  

例如:
string input ="x123456z"; //x开头z结尾字符串,想要匹配中间的'123456'
string pattern = @"(?<=x)(?:(?!z).)*";
string s2 = Regex.Matches(input, pattern, options)[0].Value;
Console.WriteLine(s2);
//output
s2 == '123456'

分析:
开头 :(?<=x) 如果x开头
(?!z). 不含Z的字符串
中间:(?:(?!z).)*  用非捕获分组 把 不含Z的字符串 看作一个整体 的匹配项
结尾:


方法2:
string input = "x123456z"; //x开头z结尾字符串,想要匹配中间的'123456'
string pattern = @"x([^z]+)";
string s2 = Regex.Matches(input, pattern)[0].Groups[1].Value;
Console.WriteLine(s2);
//output
s2 == '123456'

分析
思路讲解:
1.匹配开头:x
2.匹配中间的内容:要排除右边的z字符,:[^z]+


方法3:
匹配开头:正文<\/dt>
匹配中间:([\s\S]*)
匹配结尾:(?=<\/dl)
正文<\/dt>([\s\S]*)(?=<\/dl)

分组与替换

匹配表达式字符串中:

()括号包起来的表达式表示一个分组,第二个括号包起来的就是第二个分组,以此类推。分组从0开始,默认第0个分组,表示整个字符串.但是要排除两种括号情况:1.零宽断言的括号和2.gmis标志的括号不算分组.

替换表达式字符串中:

$1 和 \1 表示的意思相同(引用匹配到的第一个分组),\5或者$5就表示引用第5个分组。

\0表示整个字符串 Match.Groups[0].Value

匹配英文单词

\b\S*\b
解释:
\b表示 1.字母与空格空白符的边界 2.字母与行首行尾的边界 3.字母与半角标点符号的边界
\S表示非空白字符

匹配了以 'm' 开头以 'e' 结尾的单词
\bm\S*e\b
如匹配:
make
maze
manage
measure

 零宽断言 如果  那么  边界定位

表达式

意义

案例

(?=X)

如果是X

AB(?=C)

如果AB字母后面是C的话

(?!X)

如果不是X

(?!56)89

如果89前面不是56的话

(?<=X)

如果是X开头

(?!<X)

如果不是X结尾

(?:(X).)*

如果是不含Z的字符串

(?:(?!</dl).)*

(?is)

gmis标志:允许 . 匹配换行符和不区分大小写搜索

1,=号的,是肯定匹配

2,< 号的 ,是写在前面的,取后面的值

3,!号的 ,是否定的,

4,不带<号的,是写在后面的,取前面的值,

如果行的尾部 是以字母结尾,下一行还有字母和标点符号,那么就把行首尾连接起来.作用英文文章的句子以标点符号作为每行结尾

匹配表达式:(([a-zA-Z—])\r\n)(?=^.+[,\.\?!"]+.*\r\n)
替换表达式:$2

gmis标志

g 全局搜索。

i 不区分大小写搜索。

m 多行搜索。

s 允许 . 匹配换行符。

u 使用unicode码的模式进行匹配。

y 执行“粘性(sticky)”搜索,匹配从目标字符串的当前位置开始。

用法: (?xx)(?跟2两个标志) 例子:(?is) 例子2:(?gi) (?yu) 

url site 正则网站

正则相关的英文

名称英文

名称中文

Assert

断言

match

匹配

Group

分组

Capturing group

捕获分组

matches

匹配的组

Lookahead

先行

Lookbehind

回顾,后行

Regex

表达式

Positive

正向

Negative

负向

gmis

正则表达式标志 

Positive Lookahead

正向先行

Negative Lookahead

负向先行

Positive Lookbehind

正向回顾

Negative Lookahead

负向回顾

Non-capturing group

非捕获分组

匹配xx开头xx结尾

regex = r"\"([^\"]+)\""#双引号之内的内容
匹配中括号开头中括号结尾的之间内容
(\[[^\]]+\])
思路讲解:
1.匹配左边中括号:\[
2.匹配中括号内的内容,要排除右边的中括号符号,因为中括号是结尾符号:[^\]]+
3.匹配右边的中括号:\]

匹配中括号里的内容
 (.*)\[([^\[\]]*)\](.*)
如匹配  :
abc[123]abc

匹配' /'开头 'y'结尾的之间内容
(/[^y]+y)
如匹配  :
/// <summary


C# 代码
    /*
         string str = "a[中国人]b";
         var start = "[";
         var end = "]";
         return "中国人"
     */
    /// <summary>
    /// 从str中提取start开始到end结尾的内容
    /// <param name="str">a[中国人]b</param>
    /// <param name="start">[</param>
    /// <param name="end">]</param>
    /// <returns>中国人</returns>
    /// </summary>
    public static string PickUpCenter(this string str, string start, string end)
    {
        start = start.ToNomalStr();
        end = end.ToNomalStr();
        var pattern = "(?<=" + start + ")([.\\S\\s]*)(?=" + end + ")";
       //Console.WriteLine(pattern);
        Match result = Regex.Match(str,pattern);
        if (result.Success)
        {
            return result.Value;//此为匹配出的值
        }
        else
            return string.Empty;
    }
    /// <summary>
    /// 从str中提取start开始到end结尾的内容
    /// <param name="str">a[中国人]b</param>
    /// <param name="start">[</param>
    /// <param name="end">]</param>
    /// <returns>中国人</returns>
    /// </summary>
    public static List<string> PickUpCenters(this string str, string start, string end)
    {
        start = start.ToNomalStr();
        end = end.ToNomalStr();
        var pattern = "("+start + ")(" + "[^" + end + "]+" + ")(" + end+")";
       // var pattern = "(?<=" + start + ")([.\\S\\s]*)(?=" + end + ")";
        Console.WriteLine(pattern);
        var result = Regex.Matches(str, pattern);
        List<string> res =new List<string>();
        if (result.Count > 0)
        {
            foreach (Match  VARIABLE in result)
            {
                if (VARIABLE.Groups.Count == 4)
                {
                    Console.WriteLine(VARIABLE.Groups[2].Value);
                    res.Add(VARIABLE.Groups[2].Value);
                }
            }
            return res;
        }
        else
            return null;
    }
    /// <summary>
    /// 如果str含有 正则表达式特殊字符 ,则替换为普通字符 "["  => "\\["
    /// </summary>
    public static string ToNomalStr(this string str)
    {
        var dict = new Dictionary<string, string>()
        {
          //在C#语言中: "\\[" == @"\[" ,为了表示\所以多加一个斜杠
          { @"\",@"\\" },
          { "[",@"\[" },
          { "]",@"\]" },
          { "(",@"\(" },
          { ")",@"\)" },
          { "{",@"\{" },
          { "}",@"\}" },
          { "^",@"\^" },
          { "$",@"\$" },
          { "|",@"\|" },
          { "-",@"\-" },
          { "+",@"\+" },
          { "*",@"\*" },
          { "?",@"\?" },
          { "/",@"\/" },
          { "<",@"\<" },
          { ">",@"\>" },
        };
        foreach (var item in dict)
            str = str.Replace(item.Key, item.Value);
        return str;
    }

匹配后替换

匹配表达式时:()括号包起来的表达式表示一个分组,第二个括号包起来的就是第二个分组,以此类推。分组从0开始,默认第0个分组,表示整个字符串.

替换表达式时:$1 和 \1 表示的意思相同(引用匹配到的第一个分组),\5或者$5就表示引用第5个分组。

\0表示整个字符串 Match.Groups[0].Value

在C#中 整个字符串 代表第一个分组 ,第二括号表示第二个分组 ,

复制:

查找表达式:"(.+)"
替换表达式:是($1),就是($1),还是($1),这个就是复制($1)

字符串:当我看见"他"了
替换后的字符串:当我看见是他,就是他,还是他,这个就是复制他了

替换 

java中文和半角符号 正则 正则表达式半角符号_java中文和半角符号 正则_02

.