`
zengshaotao
  • 浏览: 796677 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

正则表达式(转)

 
阅读更多

正则表达式  模式匹配 Javascript

摘要:收集一些常用的正则表达式。

正则表达式用于字符串处理,表单验证等场合,实用高效,但用到时总是不太把握,以致往往要上网查一番。我将一些常用的表达式收藏在这里,作备忘之用。本贴随时会更新。

匹配中文字符的正则表达式: 代码
[\u4e00-\u9fa5]


匹配双字节字符(包括汉字在内): 代码
[^\x00-\xff]


应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) 代码
String.prototype.len=function(){ return this.replace([^\x00-\xff]/g,"aa").length; }


匹配空行的正则表达式: 代码
\n[\s|]*\r


匹配HTML标记的正则表达式: 代码
/<(.*)>.*<\/\1>|<(.*) \/>/


匹配首尾空格的正则表达式: 代码
(^\s*)|(\s*$)


应用:j avascript中没有像v bscript那样的trim函数,我们就可以利用这个表达式来实现,如下: 代码
String.prototype.trim = function()
{
   return this.replace(/(^\s*)|(\s*$)/g, "");
}


利用正则表达式分解和转换IP地址
下面是利用正则表达式匹配IP地址,并将IP地址转换成对应数值的Javascript程序: 代码
function IP2V(ip)
{
    re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g  //匹配IP地址的正则表达式
    if(re.test(ip))
    {
        return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1
    }
    else
    {
        throw new Error("Not a valid IP address!")
    }
}


不过上面的程序如果不用正则表达式,而直接用split函数来分解可能更简单,程序如下: 代码
var ip="10.100.20.168"
ip=ip.split(".")
alert("IP值是:"+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))


匹配Email地址的正则表达式: 代码
\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*


匹配网址URL的正则表达式: 代码
http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?


利用正则表达式去除字串中重复的字符的算法程序:[*注:此程序不正确] 代码
var s="abacabefgeeii"
var s1=s.replace(/(.).*\1/g,"$1")
var re=new RegExp("["+s1+"]","g")
var s2=s.replace(re,"")
alert(s1+s2)  //结果为:abcefgi


*注
===============================
如果var s = "abacabefggeeii"
结果就不对了,结果为:abeicfgg
正则表达式的能力有限
===============================

我原来在CSDN上发贴寻求一个表达式来实现去除重复字符的方法,最终没有找到,这是我能想到的最简单的实现方法。思路是使用后向引用取出包括重复的字符,再以重复的字符建立第二个表达式,取到不重复的字符,两者串连。这个方法对于字符顺序有要求的字符串可能不适用。

得用正则表达式从URL地址中提取文件名的javascript程序,如下结果为page1 代码
s="http://blog.penner.cn/page1.htm"
s=s.replace(/(.*\/){ 0, }([^\.]+).*/ig,"$2")
alert(s)


利用正则表达式限制网页表单里的文本框输入内容:

用正则表达式限制只能输入中文: 代码
onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"


用正则表达式限制只能输入全角字符: 代码
onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))"


用正则表达式限制只能输入数字: 代码
onkeyup="value=value.replace(/[^\d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"


用正则表达式限制只能输入数字和英文: 代码
onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"


匹配非负整数(正整数 + 0) 代码
^\d+$

匹配正整数 代码
^[0-9]*[1-9][0-9]*$

匹配非正整数(负整数 + 0) 代码
^((-\d+)|(0+))$

匹配负整数 代码
^-[0-9]*[1-9][0-9]*$

匹配整数 代码
^-?\d+$

匹配非负浮点数(正浮点数 + 0) 代码
^\d+(\.\d+)?$

匹配正浮点数 代码
^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$

匹配非正浮点数(负浮点数 + 0) 代码
^((-\d+(\.\d+)?)|(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+)?$

匹配由26个英文字母组成的字符串 代码
^[A-Za-z]+$

匹配由26个英文字母的大写组成的字符串 代码
^[A-Z]+$

匹配由26个英文字母的小写组成的字符串 代码
^[a-z]+$

匹配由数字和26个英文字母组成的字符串 代码
^[A-Za-z0-9]+$

匹配由数字、26个英文字母或者下划线组成的字符串 代码
^\w+$

匹配email地址 代码
^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$

匹配url 代码
^[a-zA-z]+://匹配(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$

匹配html tag 代码
<\s*(\S+)(\s[^>]*)?>(.*?)<\s*\/\1\s*>


Visual Basic & C# Regular Expression
1.确认有效电子邮件格式
下面的代码示例使用静态 Regex.IsMatch 方法验证一个字符串是否为有效电子邮件格式。如果字符串包含一个有效的电子邮件地址,则 IsValidEmail 方法返回 true,否则返回 false,但不采取其他任何操作。您可以使用 IsValidEmail,在应用程序将地址存储在数据库中或显示在 ASP.NET 页中之前,筛选出包含无效字符的电子邮件地址。

[Visual Basic] 代码
Function IsValidEmail(strIn As String) As Boolean
' Return true if strIn is in valid e-mail format.
Return Regex.IsMatch(strIn, ("^([\w-\.]+)@((\[[0-9]{ 1,3 }\.[0-9]{ 1,3 }\.[0-9]{ 1,3 }\.)|(([\w-]+\.)+))([a-zA-Z]{ 2,4 }|[0-9]{ 1,3 })(\]?)$")
End Function

[C#] 代码
bool IsValidEmail(string strIn)
{
// Return true if strIn is in valid e-mail format.
return Regex.IsMatch(strIn, @"^([\w-\.]+)@((\[[0-9]{ 1,3 }\.[0-9]{ 1,3 }\.[0-9]{ 1,3 }\.)|(([\w-]+\.)+))([a-zA-Z]{ 2,4 }|[0-9]{ 1,3 })(\]?)$");
}


2.清理输入字符串
下面的代码示例使用静态 Regex.Replace 方法从字符串中抽出无效字符。您可以使用这里定义的 CleanInput 方法,清除掉在接受用户输入的窗体的文本字段中输入的可能有害的字符。CleanInput 在清除掉除 @、-(连字符)和 .(句点)以外的所有非字母数字字符后返回一个字符串。

[Visual Basic] 代码
Function CleanInput(strIn As String) As String
' Replace invalid characters with empty strings.
Return Regex.Replace(strIn, "[^\w\.@-]", "")
End Function

[C#] 代码
String CleanInput(string strIn)
{
// Replace invalid characters with empty strings.
return Regex.Replace(strIn, @"[^\w\.@-]", "");
}

 

3.更改日期格式
以下代码示例使用 Regex.Replace 方法来用 dd-mm-yy 的日期形式代替 mm/dd/yy 的日期形式。

[Visual Basic] 代码
Function MDYToDMY(input As String) As String
Return Regex.Replace(input, _
"\b(?<month>\d{ 1,2 })/(?<day>\d{ 1,2 })/(?<year>\d{ 2,4 })\b", _
"${ day }-${ month }-${ year }")
End Function

[C#] 代码
String MDYToDMY(String input)
{
return Regex.Replace(input,
"\\b(?<month>\\d{ 1,2 })/(?<day>\\d{ 1,2 })/(?<year>\\d{ 2,4 })\\b",
"${ day }-${ month }-${ year }");
}


Regex 替换模式
本示例说明如何在 Regex.Replace 的替换模式中使用命名的反向引用。其中,替换表达式 ${ day } 插入由 (?<day>...) 组捕获的子字符串。

有几种静态函数使您可以在使用正则表达式操作时无需创建显式正则表达式对象,而 Regex.Replace 函数正是其中之一。如果您不想保留编译的正则表达式,这将给您带来方便


4.提取 URL 信息
以下代码示例使用 Match.Result 来从 URL 提取协议和端口号。例如,“http://www.penner.cn:8080......将返回“http:8080”。

[Visual Basic] 代码
Function Extension(url As String) As String
Dim r As New Regex("^(?<proto>\w+)://[^/]+?(?<port>:\d+)?/", _
RegexOptions.Compiled)
Return r.Match(url).Result("${ proto }${ port }")
End Function

[C#] 代码
String Extension(String url)
{
Regex r = new Regex(@"^(?<proto>\w+)://[^/]+?(?<port>:\d+)?/",
RegexOptions.Compiled);
return r.Match(url).Result("${ proto }${ port }");
}


只有字母和数字,不小于6位,且数字字母都包含的密码的正则表达式
在C#中,可以用这个来表示: 代码
"\w{ 6 }(\w+)*"


一个将需要将路径字符串拆分为根目录和子目录两部分的算法程序,考虑路径格式有:C:\aa\bb\cc , \\aa\bb\ccftp://aa.bb/cc 上述路径将分别被拆分为:C:\和aa\bb\cc ,\\aa 和 \bb\cc , ftp:// 和 aa.bb/cc ,用javascript实现如下:
代码
var strRoot,strSub
var regPathParse=/^([^\\^\/]+[\\\/]+|\\\\[^\\]+)(.*)$/
if(regPathParse.test(strFolder))
{
    strRoot=RegExp.$1
    strSub=RegExp.$2
}

分享到:
评论

相关推荐

    正则表达式转NFA实现

    总的来说,正则表达式转NFA的实现是理论与实践的结合,它涉及编译原理、形式语言和自动机理论等领域的知识,对于理解和处理字符串模式匹配问题具有深远的意义。在实际应用中,这一转换过程常被用于文本分析、搜索...

    正则表达式转DFA

    正则表达式是一种强大的文本处理工具,用于匹配字符串模式。在计算机科学中,它与形式语言理论密切相关,尤其是在编译器设计和文本处理程序中。正则表达式通常被转换为确定有限状态自动机(DFA)以进行高效地模式...

    正则表达式转换为NFA(Regex to NFA).jar

    用JAVA写的一个将正则表达式转换为NFA的代码,基于Thompson算法的思想,递归构建NFA。jar为源码文件。 输出非确定有限自动状态机的有向图。如正则表达式: c(a|b)NFA为:0-c-&gt;1-ep-&gt;2-a-&gt;3-ep-&gt;7 ,0-c-&gt;1-ep-&gt;4-b-&gt;5-...

    正则表达式转换工具

    正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,它用于匹配、查找、替换等操作,涉及字符串处理的各个领域。正则表达式转换工具是专门针对这一需求而设计的,它能帮助用户将输入的内容转换...

    正则表达式转换为NFA

    正则表达式是一种强大的文本处理工具,用于匹配和操作字符串模式。它们在编程语言中广泛使用,例如在C语言中,常用于数据验证、搜索、替换等任务。本项目涉及的是将正则表达式转换为非确定性有限状态自动机(NFA),...

    正则表达式转换为NFA,dfa,确定化

    正则表达式是一种强大的文本处理工具,用于匹配和解析字符串模式。在计算机科学领域,它被广泛应用于数据验证、文本搜索、编辑器功能等。正则表达式可以通过一系列转换步骤转化为非确定有限自动机(NFA)和确定有限...

    正则表达式转换为NFA程序代码

    输入一个正则表达式,然后将此正则表达式转换为NFA,最后将此NFA输出 【实验要求】: 写出程序运行环境, 体会,程序结构,程序清单, 典型结果,以及结果分析 【程序运行环境】: 此程序是在Visual C++下,新建一...

    正则表达式转换为nfa以c语言源程序

    代码相对简单; c语言实现; 正则表达式转换为nfa;

    正则表达式转换

    正则表达式转换是一个在IT领域中非常实用的工具,主要应用于文本处理和模式匹配。在编程和数据处理中,正则表达式(Regular Expression,简称regex)是一种强大的字符串处理语言,可以用来查找、替换或者提取符合...

    编译原理正则表达式转NFA转DFA DFA最小化 Cpp代码

    编译原理课的大作业 包含三个小实验 在一个cpp文件里 正则表达式转换为nfa nfa转换为dfa dfa最小化 个人原创代码

    DFA NFA 正则表达式转换

    项目中的代码提供了将正则表达式转化为NFA的算法,这对于理解正则表达式的工作原理和实现词法分析器非常有帮助。 此外,DFA最小化是一个优化过程,通过消除冗余状态,使DFA更加精简且易于理解。这个项目包含了一个...

    正则表达式转NFA

    课程设计 正规式构造nfa.这是编译原理的一个实验, 是把一个正则表达式转化为不确定有穷自动机NFA的算法程序,朋兴趣的朋友可以下载来看看哦。

    根据正则表达式生成满足正则的数据

    在IT领域,正则表达式(Regular Expression)是一种强大的文本处理工具,用于匹配字符串模式。它们广泛应用于数据验证、搜索、替换等操作。本话题主要关注如何根据正则表达式生成满足该模式的数据,这在测试、数据...

    正则表达式转化为NFA

    ### 正则表达式转化为NFA(非确定有限自动机):深度解析 #### 引言 正则表达式转化为NFA是计算机科学中的一个重要概念,尤其在编译原理、文本处理以及模式匹配等领域有着广泛的应用。通过将正则表达式转化为NFA,...

    正则表达式实现将MM/DD/YYYY格式的日期转换为YYYY-MM-DD格式

    本文所涉及的知识点集中在正则表达式领域的应用,具体而言,是使用正则表达式来实现日期格式的转换。具体从MM/DD/YYYY格式转换为YYYY-MM-DD格式。在这过程中,我们不仅会探讨正则表达式的应用方法,同时还会涉及日期...

    正则表达式到NFA

    正则表达式是一种强大的文本处理工具,广泛应用于编程语言、文本编辑器以及各种搜索和匹配操作。它们可以简洁地描述字符串的模式,如字符的出现次数、特定字符序列等。在计算机科学领域,尤其是编译原理中,正则...

    正则表达式转为NFA

    正则表达式是一种强大的文本处理工具,用于匹配字符串模式。它们在编程语言、文本编辑器、搜索引擎等中广泛应用。在理论计算机科学中,正则表达式可以转换为非确定性有限状态自动机(NFA),这是一个数学模型,用于...

    正则表达式测试工具C#版(src)

    正则表达式是一种强大的文本处理工具,用于在字符串中进行模式匹配和搜索。在C#编程语言中,正则表达式被广泛应用于数据验证、文本提取、格式转换等多个场景。本项目提供了一个C#编写的正则表达式测试工具,包含完整...

    正则表达式最小化DFA

    **正则表达式转NFA(非确定有限自动机)** 正则表达式的转换通常始于将其转换为非确定有限自动机(Non-Deterministic Finite Automaton)。NFA是一种状态机,其中每个状态可以有多个出边,每个边都标记了一个字符...

Global site tag (gtag.js) - Google Analytics