[Regex]Get正则表达式

前端之家收集整理的这篇文章主要介绍了[Regex]Get正则表达式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

原创文章,欢迎转载。转载请注明:转载自 祥的博客

原文链接http://www.jb51.cc/article/p-pzejexoe-bac.html


一直觉得正则表达式是很Geek的东西,一直浸淫在Windows的环境下,让我很难接触到这个伟大的发明,最近用C#做的项目里面要处理字符串,发现C#支持正则表达式,故而熟悉了一下,发现真是相见恨晚,处理效果真是太棒了,感觉这个技能一定要Get,故而催生出这篇博文。

基本概念

记住正则语法最好的办法就是记住这三样东西:Bracket(括号),caret(插入符号)和Dollars(美元符号)。

B C D
在正则表达式中有3种类型的括号方括号 [ 和花括号 { 。方括号 [ 内是需要匹配的字符,花括号 { 内是指定匹配字符的数量。圆括号 ( 则是用来分组的。 插入符号 ^ 表示正则式的开始。 美元符号 $ 表示正则式的结束。

现在你知道上面的3个语法后,你就可以写世界上任何一条验证规则了。比如下面的例子就很好的说明了上面3条正则语法是如何协调运作的。

具体实例

Regex代码 说明 匹配字符串
^my 表示所有以 my 开头的字符串 my penmyDestine
to win$ 表示所有以 to win 结尾的字符串 I want to win
^abc$ 表示开头结尾都是 abc 的字符串 只有 abc 这一种情况
me 表示任何包含 me 的字符串 memeIt's me,等

“*,+,?”的用法

*+? 这三个符号,表示一个或一序列字符重复出现的次数。它们分别表示:

  • * 表示,字符出现次数没有 或 更多
  • + 表示,字符出现次数一次 或 更多
  • ? 表示,字符出现次数没有 或 一次

下面是几个例子:

Regex代码 说明 匹配字符串
ab* 表示一个字符串有一个a后面跟着0个或若干个b aababb
ab+ 表示一个字符串有一个a后面跟着至少一个b或者更多 ababb
ab? 表示一个字符串有一个a后面跟着0个或者一个b aaaaab``abs
a?b+$ 表示在字符串的末尾有0个或一个a跟着一个或几个b abbabb

“{}”的用法

也可以使用范围,用大括号括起,用以表示重复次数的范围

Regex代码 说明 匹配字符串
ab{2} 表示一个字符串有一个a跟着2个b abbsabbbbbbsabbsegf
ab{2,} 表示一个字符串有一个a后面跟着至少2个b或者更多 abbabbbbb
ab{3,5} 表示一个字符串有一个a跟着3到5个b

请注意,你必须指定范围的下限(如:{0,2}而不是{,2})。 @H_634_301@ 还有,你可能注意到了,*+? 相当于{0,}{1,}{0,1}

“|”的用法

还有一个 | ,表示 或操作

Regex代码 说明 匹配字符串
hi|hello 表示一个字符串里有 hi 或者 hello
(b|cd)ef 表示一个字符串里有 befcdef
(a|b)*c 表示一串ab混合的字符串后面跟一个c cacbcaaac

“.”的用法

. 可以替代任何字符。

Regex代码 说明 匹配字符串
a.[0-9] 表示一个字符串有一个 a 后面跟着一个任意字符和一个数字 ax9a*0
^.{3}$ 表示有任意三个字符的字符串(长度为3个字符) 123abc

“[]”的用法

方括号 [] 表示某些字符允许在一个字符串中的某一特定位置出现。

Regex代码 说明 匹配字符串
[ab] 表示一个字符串有一个 ab(相当于 a|b assbkk
[a-d] 表示一个字符串包含小写的 ad 中的一个(相当于 a¦b¦c¦d 或者 [abcd]
^[a-zA-Z] 表示一个以字母开头的字符串
[0-9]% 表示一个百分号前有一位的数字
,[a-zA-Z0-9]$ 表示一个字符串以一个逗号后面跟着一个字母或数字结束

还可以在方括号里用 ^ 表示不希望出现的字符,^ 应在方括号里的第一位。

Regex代码 说明 匹配字符串
%[^a-zA-Z]% 表示两个百分号中不应该出现字母 %1%b%2%a

为了逐字表达,你必须在^.$()|*+?{\ 这些字符前加上转移字符\

请注意在方括号中,不需要转义字符。

快捷命令

可以用以下的快捷命令来简化你的正则表达式

实际命令 快捷命令
[0-9] \d
[a-z][0-9][_] \w
0次或多次发生 *
至少一次发生 +
0次或1次发生 ?

示例

Regex代码 说明 匹配字符串
^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$ 校验普通电话、传真号码:可以“+”或数字开头,可含有“-” 和 “ ” +123 -999 999 ; +123-999 999 ;123 999 999 ;+123 999999 等
^(\w){6,20}$ 校验密码:只能输入6-20个字母、数字、下划线
^http[s]{0,1}:\/\/.+$ 校验URL \/ :表示字符“/”;. 表示所有字符的集;+ 等同于{1,},就是1到正无穷吧
^http[s]{0,1}:\/\/.{1,n}$ 表示url串的长度为length(“https://”) + n
^[\u4E00-\u9FA5]+$ 校验纯中文字符
^\d+$ 非负整数(正整数 + 0)
^[0-9]*[1-9][0-9]*$ 正整数
^((-\d+)|(0+))$ 非正整数(负整数 + 0)
^-[0-9]*[1-9][0-9]*$ 负整数
^-?\d+$ 整数
^\d+(\.\d+)?$ 非负浮点数(正浮点数 + 0)
^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$ 正浮点数
^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 非正浮点数(负浮点数 + 0)
^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$ 负浮点数
^(-?\d+)(\.\d+)?$ 浮点数
^[+-]?\d+(\.\d+)?$ 浮点数前面可加+或者-
^[A-Za-z]+$ 由26个英文字母组成的字符串
^[A-Z]+$ 由26个英文字母的大写组成的字符串
^[a-z]+$ 由26个英文字母的小写组成的字符串
^[A-Za-z0-9]+$ 由数字和26个英文字母组成的字符串
^\w+$ 由数字、26个英文字母或者下划线组成的字符串
^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$ email地址
^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$ url
^(\d{2}|\d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$ 年-月-日
^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(\d{2}|\d{4})$ 月/日/年
^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$ Emil
^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5]).(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$ IP地址
^([0-9A-F]{2})(-[0-9A-F]{2}){5}$ MAC地址的正则表达式
^[-+]?\d+(\.\d+)?$ 值类型正则表达式

C#测试程序

主要是要使用 Regex 这个类,它的命名空间是 System.Text.RegularExpressions

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;

namespace RegexTester
{
    public partial class FormRegex : Form
    {
        public FormRegex()
        {
            InitializeComponent();
        }

        private void btn_Test_Click(object sender,EventArgs e)
        {
            setControl();          
        }

        private void t_Regex_TextChanged(object sender,EventArgs e)
        {
            setControl();
        }

        private void t_Test_TextChanged(object sender,EventArgs e)
        {
            setControl();
        }

#region Local Function

        public void setControl()
        {
            string str = t_Test.Text;
            string strReg = t_Regex.Text;
            if (("" == str)||("" == strReg))
            {
                lab_show.Text = "Match or Not";
                lab_show.ForeColor = Color.Black;
                lab_show.TextAlign = ContentAlignment.MiddleCenter; 
                return;
            }

            if (isMatchReg(str,strReg))
            {
                lab_show.Text = "√ Match";
                lab_show.ForeColor = Color.LawnGreen;
                lab_show.TextAlign = ContentAlignment.MiddleCenter;             
            }
            else
            {
                lab_show.Text = "× Not Match";
                lab_show.ForeColor = Color.Red;
                lab_show.TextAlign = ContentAlignment.MiddleCenter;                
            }
        }

        public static bool isMatchReg(string str,string regStr)
        {
            //判断
            return Regex.IsMatch(str,regStr);
        }

#endregion

        private void FormRegex_KeyDown(object sender,KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)//如果输入的是回车键
            {
                setControl();
            }
        }

    }
}

猜你在找的正则表达式相关文章