正则表达式在线验证工具

js 正则验证不能含有中文与特殊字符

varmyReg = /^/g,’’)}else{this.value=this.value.replace(/\D/g,’’)}“》 PS:这里再为大家提供2款非常方便的正则表达式工具供大家参考使用: JavaScript正则表达式在线测试工具: http://tools.jb51.net/regex/javascript 正则表达式在线生成工具: http://tools.jb51.net/regex/create_reg var temp = ’abcdefg Fw:123456 Fw:789.1011’; temp =temp.indexOf(‘.’); //匹配某个字符位置 alert(temp);��var temp = ’dsd-5555’ temp =temp.replace(’-’,’’); //匹配某个字符必替换 alert(temp);

正则表达式验证

function checkName(){
var name=document.getElementById(“text1“);
var regName=/^\w{1,}$/;
if(regName.test(name.value)){
alert(’不为空’);
return true;
}
else{
alert(“用户名不能为空“);
return false;
}
}
这个可以了,推荐你一个正则表达式工具,填入这个\w{1,},不用/^ $/,再输入字符,然后执行,就可以看到结果,很好用的东西。百度一下就好了。

谁有正则表达式祥解

分类: 电脑/网络 》》 程序设计 》》 其他编程语言
解析:

正则表达式

如果我们问那些UNIX系统的爱好者他们最喜欢什么,答案除了稳定的系统和可以远程启动之外,十有八九的人会提到正则表达式;如果我们再问他们最头痛的是什么,可能除了复杂的进程控制和安装过程之外,还会是正则表达式。那么正则表达式到底是什么?如何才能真正的掌握正则表达式并正确的加以灵活运用?本文将就此展开介绍,希望能够对那些渴望了解和掌握正则表达式的读者有所助益。

入门简介

简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具。我们可以在几乎所有的基于UNIX系统的工具中找到正则表达式的身影,例如,vi器,Perl或PHP脚本语言,以及awk或sed shell程序等。此外,象JavaScript这种客户端的脚本语言也提供了对正则表达式的支持。由此可见,正则表达式已经超出了某种语言或某个系统的局限,成为人们广为接受的概念和功能。
正则表达式可以让用户通过使用一系列的特殊字符构建匹配模式,然后把匹配模式与数据文件、程序输入以及WEB页面的表单输入等目标对象进行比较,根据比较对象中是否包含匹配模式,执行相应的程序。

举例来说,正则表达式的一个最为普遍的应用就是用于验证用户在线输入的邮件地址的格式是否正确。如果通过正则表达式验证用户邮件地址的格式正确,用户所填写的表单信息将会被正常处理;反之,如果用户输入的邮件地址与正则表达的模式不匹配,将会弹出提示信息,要求用户重新输入正确的邮件地址。由此可见正则表达式在WEB应用的逻辑判断中具有举足轻重的作用。

基本语法

在对正则表达式的功能和作用有了初步的了解之后,我们就来具体看一下正则表达式的语法格式。

正则表达式的形式一般如下:

/love/

其中位于“/”定界符之间的部分就是将要在目标对象中进行匹配的模式。用户只要把希望查找匹配对象的模式内容放入“/”定界符之间即可。为了能够使用户更加灵活的定制模式内容,正则表达式提供了专门的“元字符”。所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。

较为常用的元字符包括: “+”, “*”,以及 “?”。其中,“+”元字符规定其前导字符必须在目标对象中连续出现一次或多次,“*”元字符规定其前导字符必须在目标对象中出现零次或连续多次,而“?”元字符规定其前导对象必须在目标对象中连续出现零次或一次。

下面,就让我们来看一下正则表达式元字符的具体应用。

/fo+/

因为上述正则表达式中包含“+”元字符,表示可以与目标对象中的 “fool”, “fo”, 或者 “football”等在字母f后面连续出现一个或多个字母o的字符串相匹配。

/eg*/

因为上述正则表达式中包含“*”元字符,表示可以与目标对象中的 “easy”, “ego”, 或者 “egg”等在字母e后面连续出现零个或多个字母g的字符串相匹配。

/Wil?/

因为上述正则表达式中包含“?”元字符,表示可以与目标对象中的 “Win”, 或者 “Wilson”,等在字母i后面连续出现零个或一个字母l的字符串相匹配。

除了元字符之外,用户还可以精确指定模式在匹配对象中出现的频率。例如,

/jim/

上述正则表达式规定字符m可以在匹配对象中连续出现2-6次,因此,上述正则表达式可以同jimmy或jimmmmmy等字符串相匹配。

在对如何使用正则表达式有了初步了解之后,我们来看一下其它几个重要的元字符的使用方式。

\s:用于匹配单个空格符,包括tab键和换行符;

\S:用于匹配除单个空格符之外的所有字符;

\d:用于匹配从0到9的数字;

\w:用于匹配字母,数字或下划线字符;

\W:用于匹配所有与\w不匹配的字符;

. :用于匹配除换行符之外的所有字符。

(说明:我们可以把\s和\S以及\w和\W看作互为逆运算)

下面,我们就通过实例看一下如何在正则表达式中使用上述元字符。

/\s+/

上述正则表达式可以用于匹配目标对象中的一个或多个空格字符。

/\d000/

如果我们手中有一份复杂的财务报表,那么我们可以通过上述正则表达式轻而易举的查找到所有总额达千元的款项。

除了我们以上所介绍的元字符之外,正则表达式中还具有另外一种较为独特的专用字符,即定位符。定位符用于规定匹配模式在目标对象中的出现位置。

较为常用的定位符包括: “^”, “$”, “\b” 以及 “\B”。其中,“^”定位符规定匹配模式必须出现在目标字符串的开头,“$”定位符规定匹配模式必须出现在目标对象的结尾,\b定位符规定匹配模式必须出现在目标字符串的开头或结尾的两个边界之一,而“\B”定位符则规定匹配对象必须位于目标字符串的开头和结尾两个边界之内,即匹配对象既不能作为目标字符串的开头,也不能作为目标字符串的结尾。同样,我们也可以把“^”和“$”以及“\b”和“\B”看作是互为逆运算的两组定位符。举例来说:

/^hell/

因为上述正则表达式中包含“^”定位符,所以可以与目标对象中以 “hell”, “hello”或 “hellhound”开头的字符串相匹配。

/ar$/

因为上述正则表达式中包含“$”定位符,所以可以与目标对象中以 “car”, “bar”或 “ar” 结尾的字符串相匹配。

/\bbom/

因为上述正则表达式模式以“\b”定位符开头,所以可以与目标对象中以 “bomb”, 或 “bom”开头的字符串相匹配。

/man\b/

因为上述正则表达式模式以“\b”定位符结尾,所以可以与目标对象中以 “human”, “woman”或 “man”结尾的字符串相匹配。

为了能够方便用户更加灵活的设定匹配模式,正则表达式允许使用者在匹配模式中指定某一个范围而不局限于具体的字符。例如:

//

上述正则表达式将会与从A到Z范围内任何一个大写字母相匹配。

//

上述正则表达式将会与从a到z范围内任何一个小写字母相匹配。

//

上述正则表达式将会与从0到9范围内任何一个数字相匹配。

/()+/

上述正则表达式将会与任何由字母和数字组成的字符串,如 “aB0” 等相匹配。这里需要提醒用户注意的一点就是可以在正则表达式中使用 “()” 把字符串组合在一起。“()”符号包含的内容必须同时出现在目标对象中。因此,上述正则表达式将无法与诸如 “abc”等的字符串匹配,因为“abc”中的最后一个字符为字母而非数字。

如果我们希望在正则表达式中实现类似编程逻辑中的“或”运算,在多个不同的模式中任选一个进行匹配的话,可以使用管道符 “|”。例如:

/to|too|2/

上述正则表达式将会与目标对象中的 “to”, “too”, 或 “2” 相匹配。

正则表达式中还有一个较为常用的运算符,即否定符 “”规定目标对象中不能存在模式中所规定的字符串。例如:

//

上述字符串将会与目标对象中除A,B,和C之外的任何字符相匹配。一般来说,当“^”出现在 “”时,则应当被视做定位符。

最后,当用户需要在正则表达式的模式中加入元字符,并查找其匹配对象时,可以使用转义符“\”。例如:

/Th\*/

上述正则表达式将会与目标对象中的“Th*”而非“The”等相匹配。

ASP中正则表达式的应用(一)

一、正则表达式概述

二、正则表达式在VBScript中的应用

三、正则表达式在VavaScript中的应用

四、示例

五、总结

一、正则表达式概述

如果原来没有使用过正则表达式,那么可能对这个术语和概念会不太熟悉。不过,它们并不是您想象的那么新奇。

请回想一下在硬盘上是如何查找文件的。您肯定会使用 ? 和 * 字符来帮助查找您正寻找的文件。? 字符匹配文件名中的单个字符,而 * 则匹配一个或多个字符。一个如 ’data?.dat’ 的模式可以找到下述文件:data1.dat、data2.dat等等。如果使用 * 字符代替 ? 字符,则将扩大找到的文件数量。’data*.dat’ 可以匹配下述所有文件名:data.dat、data1.dat、data12.dat等等,尽管这种搜索文件的方法肯定很有用,但也十分有限。? 和 * 通配符的有限能力可以使你对正则表达式能做什么有一个概念,不过正则表达式的功能更强大,也更灵活。

在我们编写ASP程序时,经常会判断一个字符串的有效性,如;一个串是否是数字、是否是有效的Email地址等等。如果不使用正则表达式,那么判断的程序会很长,并且容易出错,如果使用正则表达式,这些判断就是一件很轻松的工作了。后面我们将介绍如何判断数字和Email地址的有效性。

在典型的搜索和替换操作中,必须提供要查找的确切文字。这种技术对于静态文本中的简单搜索和替换任务可能足够了,但是由于它缺乏灵活性,因此在搜索动态文本时就有困难了,甚至是不可能的。

使用正则表达式,能完成些什么事情呢?

测试字符串的某个模式。例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式。这称为数据有效性验证。

替换文本。可以在文档中使用一个正则表达式来标识特定文字,然后可以全部将其删除,或者替换为别的文字。

根据模式匹配从字符串中提取一个子字符串。可以用来在文本或输入字段中查找特定文字。

例如,如果需要搜索整个 web 站点来删除某些过时的材料并替换某些HTML 格式化标记,则可以使用正则表达式对每个文件进行测试,看在该文件中是否存在所要查找的材料或 HTML 格式化标记。用这个方法,就可以将受影响的文件范围缩小到包含要删除或更改的材料的那些文件。然后可以使用正则表达式来删除过时的材料,最后,可以再次使用正则表达式来查找并替换那些需要替换的标记。

那么,正则表达式语法的语法是如何呢?

一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。

这里有一些可能会遇到的正则表达式示例:

/^\*$“ 匹配一个空白行。

/\d-\d/ “\d-\d“ 验证一个ID 号码是否由一个2位数字,一个连字符以及一个5位数字组成。

/《(.*)》.*《\/\1》/ “《(.*)》.*《\/\1》“ 匹配一个 HTML 标记。

二、正则表达式在VBScript中的应用

VBScript使用RegExp对象、Matches *** 以及Match对象提供正则表达式支持功能。我们还是先看一个例子。

《%

Function RegExpTest(patrn, strng)

Dim regEx, Match, Matches ’建立变量。

Set regEx = New RegExp ’建立正则表达式。

regEx.Pattern = patrn ’设置模式。

regEx.IgnoreCase = True ’设置是否区分字符大小写。

regEx.Global = True ’设置全局可用性。

Set Matches = regEx.Execute(strng) ’执行搜索。

For Each Match in Matches ’遍历匹配 *** 。

RetStr = RetStr & “Match found at position “

RetStr = RetStr & Match.FirstIndex & “. Match Value is ’“

RetStr = RetStr & Match.Value & “’.“ & “《BR》“

Next

RegExpTest = RetStr

End Function

response.write RegExpTest(“s.“, “IS1 Js2 IS3 is4“)

%》

在这个例子中,我们查找字符串中有无is或者js这两个词,忽略大小写。运行的结果如下:

Match found at position 0. Match Value is ’IS1’.

Match found at position 4. Match Value is ’Js2’.

Match found at position 8. Match Value is ’IS3’.

Match found at position 12. Match Value is ’is4’.

下面我们就介绍这三个对象和 *** 。

1、RegExp对象是最重要的一个对象,它有几个属性,其中:

○Global 属性,设置或返回一个 Boolean 值,该值指明在整个搜索字符串时模式是全部匹配还是只匹配第一个。如果搜索应用于整个字符串,Global 属性的值为 True,否则其值为 False。默认的设置为 False。

○IgnoreCase 属性,设置或返回一个Boolean值,指明模式搜索是否区分大小写。如果搜索是区分大小写的,则 IgnoreCase 属性为 False;否则为 True。缺省值为 False。

○Pattern 属性,设置或返回被搜索的正则表达式模式。必选项。总是一个 RegExp 对象变量。

2、Match 对象

匹配搜索的结果是存放在Match对象中,提供了对正则表达式匹配的只读属性的访问。 Match 对象只能通过 RegExp 对象的 Execute 方法来创建,该方法实际上返回了 Match 对象的 *** 。所有的 Match 对象属性都是只读的。在执行正则表达式时,可能产生零个或多个 Match 对象。每个 Match 对象提供了被正则表达式搜索找到的字符串的访问、字符串的长度,以及找到匹配的索引位置等。

○FirstIndex 属性,返回在搜索字符串中匹配的位置。FirstIndex 属性使用从零起算的偏移量,该偏移量是相对于搜索字符串的起始位置而言的。换言之,字符串中的第一个字符被标识为字符 0

○Length 属性,返回在字符串搜索中找到的匹配的长度。

○Value 属性,返回在一个搜索字符串中找到的匹配的值或文本。

3、Matches ***

正则表达式 Match 对象的 *** 。Matches *** 中包含若干独立的 Match 对象,只能使用 RegExp 对象的 Execute 方法来创建之。与独立的 Match 对象属性相同,Matches ` *** 的一个属性是只读的。在执行正则表达式时,可能产生零个或多个 Match 对象。每个 Match 对象都提供了与正则表达式匹配的字符串的访问入口、字符串的长度,以及标识匹配位置的索引。

学习了这三个对象和 *** ,如何应用于字符串的判断和替换呢?regExp对象的三个方法正好解决了这个问题,它们是Replace方法、Test方法和Execute方法。

1、Replace 方法

替换在正则表达式查找中找到的文本。我们还是先看个例子:下面的例子说明了 Replace 方法的用法。

《%

Function ReplaceTest(patrn, replStr)

Dim regEx, str1 ’ 建立变量。

str1 = “The quick brown fox jumped over the lazy dog.“

Set regEx = New RegExp ’ 建立正则表达式。

regEx.Pattern = patrn ’ 设置模式。

regEx.IgnoreCase = True ’ 设置是否区分大小写。

ReplaceTest = regEx.Replace(str1, replStr) ’ 作替换。

End Function

Response.write ReplaceTest(“fox“, “cat“) & “《BR》“ ’ 将 ’fox’ 替换为 ’cat’。

Response.write ReplaceTest(“(\S+)(\s+)(\S+)“, “$3$2$1“) ’ 交换词对.

%》

2、Test 方法

对指定的字符串执行一个正则表达式搜索,并返回一个 Boolean 值指示是否找到匹配的模式。正则表达式搜索的实际模式是通过RegExp对象的Pattern属性来设置的。RegExp.Global属性对Test方法没有影响。

如果找到了匹配的模式,Test方法返回True;否则返回False。下面的代码说明了Test 方法的用法。

《%

Function RegExpTest(patrn, strng)

Dim regEx, retVal ’ 建立变量。

Set regEx = New RegExp ’ 建立正则表达式。

regEx.Pattern = patrn ’ 设置模式。

regEx.IgnoreCase = False ’ 设置是否区分大小写。

retVal = regEx.Test(strng) ’ 执行搜索测试。

If retVal Then

RegExpTest = “找到一个或多个匹配。“

Else

RegExpTest = “未找到匹配。“

End If

End Function

Response.write RegExpTest(“is.“, “IS1 is2 IS3 is4“)

%》

3、Execute 方法

对指定的字符串执行正则表达式搜索。正则表达式搜索的设计模式是通过 RegExp 对象的 Pattern 来设置的。

Execute 方法返回一个 Matches *** ,其中包含了在 string 中找到的每一个匹配的 Match 对象。如果未找到匹配,Execute 将返回空的 Matches *** 。

三、JavaScript中正则表达式的使用

在JavaScript 1.2版以后,JavaScript也支持正则表达式。

1、replace

replace在一个字符串中通过正则表达式查找替换相应的内容。replace并不改变原来的字符串,只是重新生成了一个新的字符串。如果需要执行全局查找或忽略大小写,那么在正则表达式的最后添加g和i。

例:

《SCRIPT》

re = /apples/gi;

str = “Apples are round, and apples are juicy.“;

newstr=str.replace(re, “oranges“);

document.write(newstr)

《/SCRIPT》

结果是:“oranges are round, and oranges are juicy.“

例:

《SCRIPT》

str = “Twas the night before Xmas…“;

newstr=str.replace(/xmas/i, “Christmas“);

document.write(newstr)

《/SCRIPT》

结果是:“Twas the night before Christmas…“

例:

《SCRIPT》

re = /(\w+)\s(\w+)/;str = “John Smith“;

newstr = str.replace(re, “$2, $1“);

document.write(newstr)

《/SCRIPT》

结果是:“Smith, John“.

2、search

search通过正则表达式查找相应的字符串,只是判断有无匹配的字符串。如果查找成功,search返回匹配串的位置,否则返回-1。

search(regexp)

《SCRIPT》

function testinput(re, str){

if (str.search(re) != -1)

midstring = “ contains “;

else

midstring = “ does not contain “;

document.write (str + midstring + re.source);

}

testinput(/^/i,“123“)

正则表达式如何匹配多行的所有任意字符

如何使用正则表达式来获取一段文本中的任意字符包括换行符“\n”呢?
匹配方法可以使用 (*) (+) (*)
其中*表示重复零次或更多次,+表示重复一次或更多次。

可以使用正则表达式在线测试工具验证,如下图:

正则表达式常用字符释义如下表:

pyqt5如何做正则表达式验证软件

首先,我照着前面提到的网页,大致画了个界面,包括三个 checkBox、两个 textEdit 和两个 label,分别放在三个 layout 里面大概就是下面这个界面:

保存后会得到一个扩展名为 .ui 的文件。比如我得到了一个 RegexTester.ui。

然后打开 cmd 命令行,切换到当前目录,输入以下命令: pyuic4 -o regexTesterUi.py RegexTester.ui,回车,就能根据画好的 ui 文件生成一个 py 文件。这时可以写一个测试脚本来运行一下这个界面。

1 from PyQt4.QtGui import * 2 from PyQt4.QtCore import * 3 import sys 4 import regexTesterUi 5  6 class TestDialog(QDialog,regexTesterUi.Ui_Dialog): 7     def __init__(self,parent=None): 8         super(TestDialog,self).__init__(parent) 9         self.setupUi(self)10         11 if __name__ == ’__main__’:12     app=QApplication(sys.argv)13     dialog=TestDialog()14     dialog.show()15     app.exec_()

运行这个脚本,我们就可以得到刚才画的那个 GUI 界面,并且可以选中三个 checkBox ,在两个 textEdit 里面输入文本。只是除此之外没有任何功能。现在界面已经做好,我们需要做的就是实现高亮匹配数据的功能。

首先我们来完善一下这个类,我们需要的变量为输入的正则表达式、输入的测试数据、三个匹配模式(大小写敏感、多行匹配、点匹配所有)。

1 class RegexTesterDialog(QtGui.QDialog, regexTesterUi.Ui_Dialog): 2      3     def __init__(self, parent = None): 4         super(RegexTesterDialog, self).__init__(parent) 5  6         self.CI = False     # case insensitive (i) 7         self.MB = False     # ^$ match at line breaks (m) 8         self.DM = False     # dot matched all (s) 9         self.regex = ’’10         self.data = ’’11 12         self.ui = regexTesterUi.Ui_Dialog()13         self.ui.setupUi(self)

响应功能:

由于这个界面并没有按钮,我需要程序检测到任何一点变动就改变高亮的部分。这里就涉及到 Qt 的信号和槽机制。本文就不复述这些知识,具体可以参考 QT的信号与槽机制介绍。这里我们就要用到 QTextEdit 控件的 textChanged() 信号函数。具体的介绍可以查看 Qt 在线文档。这个信号函数在检测到 QTextEdit 控件中的文本发生了变化的时候会发射一个信号,与其关联的槽函数就会立即执行。而把这个信号函数和槽函数关联起来的方法就是 connect() 方法。这个网上也有很多介绍,这里我来介绍一个更 pythonic 的方法,使用 Python 的装饰器。PyQt中支持同名传递信号,就是说根据控件的名字来自动选择哪个槽。比如这里提到的 textChanged() 信号函数,如果要响应这个文本变化信号,可以这么做:

@QtCore.pyqtSlot()                            # 该装饰器标志此函数为接收信号的槽函数def on_textEdit_Regex_textChanged(self):      # 槽函数名标准格式 【on_控件名字_信号函数名字】
self.regex = self.ui.textEdit_Regex.toPlainText()
self.ui.textEdit_Data.setText(self.regex)

这里在槽函数上面加一个装饰器表示这个函数为接收信号的槽函数,然后根据控件名和信号函数名命名一个槽函数,这里我的接收正则表达式输入的 QTextEdit 控件名为 textEdit_Regex,因此这个槽函数名为 on_textEdit_Regex_textChanged。在这个槽函数里,我们通过 toPlainText() 方法得到文本框中的文本数据,然后将 textEdit_Data 中的数据设置为我们输入的值,这样就可以测试这个槽函数运行是否正确。当测试 textEdit_Data 控件的信号和槽函数时,也可以利用 textEdit_Regex 来输出结果。

除了 QTextEdit 控件,我们的界面还有 QCheckBox 控件。去查一下文档,可以找到这个控件的信号函数为 stateChanged(int)。我们发现这个函数带有一个参数,使用之前的方法会发现无法发射信号,这里我们需要在装饰器和槽函数中加入这个参数:

@QtCore.pyqtSlot(int)def on_checkBox_CI_stateChanged(self, value):    if self.ui.checkBox_CI.isChecked():
       self.CI = True
self.ui.textEdit_Data.setText(‘True’)    else:
       self.CI = False
self.ui.textEdit_Data.setText(‘False’)

虽然我们不知道这个参数是什么,但只要加进来,就可以正常使用。同理,碰到需要两个参数的信号函数时,只要再加一个参数就行。这里,当接收到 stateChanged(int) 信号时,我们使用 isChecked() 方法来检查控件是否被选中。如果选中了,则返回真,否则返回假。这里我们同样用到了 QTextEdit 控件来输出结果测试信号是否正确。其他两个 QCheckBox 控件同样设置。

匹配功能:

完成基本的响应函数之后,就要开始实现匹配功能。这里很简单,直接调用 re 模块,使用 findall() 方法。由于有三个 checkBox 提供三种匹配模式:

  • re.I (全拼:IGNORECASE): 忽略大小写(括号内是完整写法,下同)

  • re.M (全拼:MULTILINE): 多行模式,改变’^’和’$’的行为

  • re.S (全拼:DOTALL): 点任意匹配模式,改变’.’的行为

  • 因此总共有 23 =8 种匹配模式:

  • 1 def matchData(self): 2     if (not self.CI) and (not self.MB) and (not self.DM): 3         pattern = re.compile(self.regex) 4     elif (not self.CI) and (not self.MB) and (self.DM): 5         pattern = re.compile(self.regex, re.S) 6     elif (not self.CI) and (self.MB) and (not self.DM): 7         pattern = re.compile(self.regex, re.M) 8     elif (not self.CI) and (self.MB) and (self.DM): 9         pattern = re.compile(self.regex, re.M|re.S)10     elif (self.CI) and (not self.MB) and (not self.DM):11         pattern = re.compile(self.regex, re.I)12     elif (self.CI) and (not self.MB) and (self.DM):13         pattern = re.compile(self.regex, re.I|re.S)14     elif (self.CI) and (self.MB) and (not self.DM):15         pattern = re.compile(self.regex, re.I|re.M)16     elif (self.CI) and (self.MB) and (self.DM):17         pattern = re.compile(self.regex, re.I|re.M|re.S)18         19     dataMatched = re.findall(pattern, self.data)
  • 这里我们就可以得到匹配好的一个列表。刚开始实现这部分的时候,由于 Python 的 re 模块接收的参数类型是 Python string,而 PyQt 中控件得到的数据是 QString,一直报错,我一度准备使用 Qt 的 QRegExp 类来进行正则表达式匹配。但是查找文档查了好久,只找到一个改变大小写敏感的函数,找不到设置多行匹配和点匹配所有的方法,于是我去 stackoverflow 上问了个问题:Can QRegExp do MULTILINE and DOTALL match? 得到了一个详细的答案,一个解决问题的简单方法就是使用 unicode() 方法将 QString 转换成 python string,而一般不用将 python string 转换成 QString,因为接收 QString 类型参数的函数会自动将python string 转换成 QString。这样,我们直接在两个 QTextEdit 控件的槽函数中将得到的文本数据转换成 python string,就可以交给 re 模块处理了。

  • @QtCore.pyqtSlot()                      
  • def on_textEdit_Regex_textChanged(self):                  
  •    self.regex = unicode(self.ui.textEdit_Regex.toPlainText())
  •    self.matchData()
  • 通过单步调试,我们可以测试上述 dataMatched 列表中的数据是否正确,如果正确,我们就可以继续进行下一步,实现高亮功能。

求验证中文正则表达式

\u4E00-\u9FA5只包含汉字,没有标点符号等。
比如:
“是\u201C
;是\uFF1B
,是\uFF0C
都不在这个范围内。
你遇到的问题,我估计跟编码有关:
有些工具在简体中文默认编码(CP 936 /GBK)状态下,无法正常处理此类正则表达式。
请将所用工具的编码切换到任意一种Unicode编码(比如 UTF-8)试试。
另外,简单地说,\u4E00-\u9FA5只是我们常用的GBK汉字范围。汉字不止这些。
若仍未解决,请详述现象,我继续帮你。

正则表达式测试工具怎么用

这是笑侃用c#开发的用于测试正则表达式的小工具. 支持Access 数据库, 无需安装, 解压之后就可以直接使用, 但是需要.net framework的支持(可以到微软的网站去下载)运行后点击界面上的文件夹图标即可查看原始数据库中的示例, 希望能够给大家在开发正则表达式的时候带来方便.
软件特性这是笑侃用c#开发的用于测试正则表达式的小工具. 支持Access 数据库, 无需安装, 解压之后就可以直接使用, 但是需要.net framework的支持(可以到微软的网站去下载)运行后点击界面上的文件夹图标即可查看原始数据库中的示例, 希望能够给大家在开发正则表达式的时候带来方便.

看完就懂系列之正则表达式(值得收藏)

正则表达式是很多程序员,甚至是一些有了多年经验的开发者薄弱的一项技能。大家都很多时候都会觉得正则表达式难记、难学、难用,但不可否认的是正则表达式是一项很重要的技能,所有我将学习和使用正则表达式时的关键点整理如下,供大家参考。

正则表达式(Regular Expression 或 Regex),是用于定义某种特定搜索模式的字符组合。正则表达式可用于匹配、查找和替换文本中的字符,进行输入数据的验证,查找英文单词的拼写错误等。

调试工具

下面列出了几款优秀的在线调试工具,如果你想创建或者调试正则表达式可能会需要。个人比较偏好Regex101,regex101 支持在正则表达式的不同 flavor 之间切换、解释你的正则表达式、显示匹配信息、提供常用语法参考等功能,非常强大。

Regex101

Regexr

Regexpal

在 Javascript 中,一个正则表达式以 / 开头和结尾,所以简单至 /hello regexp/ 就是一个正则表达式。

Flags(标志符或修饰符)

Flags 写在结束的/之后,可以影响整个正则表达式的匹配行为。常见的 flags 有:

Flags 可以组合使用,如:

Character Sets(字符集合)

用于匹配字符集合中的任意一个字符,常见的字符集有:

比如匹配所有的字母和数字可以写成://i。

Quantifiers (量词)

在实际使用中,我们常常需要匹配同一类型的字符多次,比如匹配 11 位的手机号,我们不可能将 写 11 遍,此时我们可以使用 Quantifiers 来实现重复匹配。

Metacharacters(元字符)

在正则表达式中有一些具有特殊含义的字母,被称为元字符,简言之,元字符就是描述字符的字符,它用于对字符表达式的内容、转换及各种操作信息进行描述。

常见的元字符有:

Special Characters (特殊字符)

正则中存在一些特殊字符,它们不会按照字面意思进行匹配,而有特殊的意义,比如前文讲过用于量词的?、*、+。其他常见的特殊字符有:

Groups(分组)

Assertion(断言)

最后,推荐大家使用Fundebug,一款很好用的 BUG 监控工具~

上面罗列出了这么多正则表达式的语法和规则,可以在一定程度上帮助我们分析和理解一段正则表达式的作用,但是如何将这些规则组合并创造出有特定作用的表达式还需要我们自己多加练习,下面举几个例子来说明运用这些规则。

1. 匹配手机号码

我们先从比较简单的匹配手机号码开始。目前国内的手机号码是1(3/4/5/7/8)开头的 11 位数字,因此手机号码的正则可以分解为以下几部分:

组合起来即为 /^1\d{9}$/ 或 /^1(3|4|5|7|8)\d{9}$/,因为使用捕获括号存在性能损失,所以推荐使用第一种写法。

2. 匹配电子邮件

标准的电子邮件组成为 《yourname》@《domain》.《extension》《optional-extension》,

每部分的格式标准为(进行了相应的简化,主要为展示如何书写正则):

每部分的正则表达式为:

组合起来形成最后的正则表达式:/^({2,8})?$/;为了增加可读性可以将每部分用“()“包起来,并不要忘记起始和结束符 ^$。