您现在的位置是:首页 >

正则任意字符 正则表示式概述 什么是正则表示式

火烧 2022-05-03 21:55:08 1051
正则表示式概述 什么是正则表示式 正则表示式概述 什么是正则表示式正则表示式概述正则表示式在程式设计语言中存在着广泛的应用,特别是用来处理字串。如匹配字串、查询字串、替换字串等。可以说,正则表示式是一

正则表示式概述 什么是正则表示式  

正则表示式概述 什么是正则表示式

正则表示式概述
正则表示式在程式设计语言中存在着广泛的应用,特别是用来处理字串。如匹配字串、查询字串、替换字串等。可以说,正则表示式是一段文字或一个公式,它是用来描述用某种模式去匹配一类字串的公式,并且该公式具有一定的模式。
本小节将介绍正则表示式的基本概念、第一个正则表示式,以及测试正则表示式的工具Code Architects Regex Tester。
什么是正则表示式
正则表示式(Regular
Expression)起源于人类神经系统的早期研究。神经生理学家Warren McCulloch和Walter
Pitts研究出一种使用数学方式描述神经网路的方法。1956年,数学家Stephen
Kleene发表了一篇标题为“神经网事件的表示法”的论文,并在该论文中引入了“正则表示式”这一个概念。该论文称正则表示式是:“正则集的代数”的表示式。因此,采用“正则表示式”这个术语。正则表示式的定义存在多种说法,具体如下:
正则表示式就是用某种模式去匹配一类字串的公式,主要用来描述字串匹配的工具。
正则表示式描述了一种字串匹配的模式。它可以用来检查字串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。
正则表示式是由普通字元(如字元a到z)以及特殊字元(称为元字元)组成的文字模式。正则表示式作为一个模板,将某个字元模式与所搜寻的字串进行匹配。
正则表示式就是用于描述某些规则的工具。这些规则经常用于处理字串中的查询或替换字串。换句话说,正则表示式就是记录文字规则的程式码。
正则表示式就是用一个“字串”来描述一个特征,然后去验证另一个“字串”是否符合这个特征。
学过《编译原理》的读者可能知道不确定有限自动机(Non-deterministic
finite automaton,简称NFA)和确定有限自动机(Deterministic finite
automaton,简称DFA)。其实,正则表示式是一个不确定有限自动机。NFA和DFA的最大区别在于它们的状态转换函式。NFA可以对同一个字串产生多种理解方式,而DFA则只有唯一的一种理解方式。也正因为如此,NFA在匹配过程中可能会回溯,NFA的效率一般要低于DFA。因此,在书写正则表示式时尽量减少回溯来提高正则表示式的效率。
如果你使用过Windows或DOS下用于档案查询的万用字元*和?,那么你不难理解正则表示式。如果你需要查询所有Word文件,那么可能使用表示式*.doc。其中,字元*是一个万用字元,它可以代表任意字串。正则表示式和万用字元具有相似性,它也可以使用一些字元(如字元.)表示任意字元。然而,它比万用字元更具有精确性。
在正则表示式中,匹配是最常用的一个词语,它描述了正则表示式动作结果。给定一段文字或字串,使用正则表示式从文字或字串中查找出符合正则表示式的字串。有可能文字或字元存在不止一个部分满足给定的正则表示式,这时每一个这样的部分被称为一个匹配。其中,匹配存在下面3种类型:
形容词性的匹配,即一个字串匹配一个正则表示式。
动词性的匹配,即在文字或字串里匹配正则表示式。
名词性的匹配,即字串中满足给定的正则表示式的一部分。
正则表示式的应用非常广泛,特别是在字串处理方面。目前来说,正则表示式已经在很多软体中得到广泛了应用,如Linux、Unix、HP等作业系统,C#、PHP、Java等程式开发环境,以及很多的应用软体中,都可以看到正则表示式的这样或那样的应用。正则表示式常见的应用如下:
验证字串,即验证给定的字串或子字串是否符合指定特征,譬如验证是否是合法的邮件地址、验证是否为合法的HTTP地址等。
查询字串,从给定的文字中查询符合指定特征的字串,比查询固定字串更加灵活方便。
替换字串,即把给定的字串中的符合指定特征的子字串替换为其他字串,比普通的替换更强大。
提取字串,即从给定的字串中提取符合指定特征的子字串。

Java中什么是正则表示式

众所周知,在程式开发中,难免会遇到需要匹配、查询、替换、判断字串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程式设计师的时间及精力。因此,学习及使用正则表示式,便成了解决这一矛盾的主要手段。
大 家都知道,正则表示式是一种可以用于模式匹配和替换的规范,一个正则表示式就是由普通的字元(例如字元a到z)以及特殊字元(元字元)组成的文字模式,它 用以描述在查询文字主体时待匹配的一个或多个字串。正则表示式作为一个模板,将某个字元模式与所搜寻的字串进行匹配。
自从jdk1.4推出java.util.regex包,就为我们提供了很好的JAVA正则表示式应用平台。

什么是正则表示式

如果原来没有使用过正则表示式,那么可能对这个术语和概念会不太熟悉。不过,它们并不是您想象的那么新奇。
请回想一下在硬碟上是如何查询档案的。您肯定会使用 ? 和 * 字元来帮助查询您正寻找的档案。? 字元匹配档名中的单个字元,而 * 则匹配一个或多个字元。一个如 'data?.dat' 的模式可以找到下述档案:
data1.dat
data2.dat
datax.dat
dataN.dat
如果使用 * 字元代替 ? 字元,则将扩大找到的档案数量。'data*.dat' 可以匹配下述所有档名:
data.dat
data1.dat
data2.dat
data12.dat
datax.dat
dataXYZ.dat
尽管这种搜寻档案的方法肯定很有用,但也十分有限。? 和 * 万用字元的有限能力可以使你对正则表示式能做什么有一个概念,不过正则表示式的功能更强大,也更灵活。

正则表示式,又称正规表示法、常规表示法(英语:Regular Expression,在程式码中常简写为regex、regexp或RE),电脑科学的一个概念。正则表示式使用单个字串来描述、匹配一系列符合某个句法规则的字串。在很多文字编辑器里,正则表示式通常被用来检索、替换那些符合某个模式的文字。

正则表示式嘛,可以给你举个例子:
比如让使用者输入一个邮箱,不能说使用者怎么输入都行吧。要限制使用者的输入,如果输入错了就给使用者提示,大概这时就要用到正正则表示式了。
它就是用来判断一些内容是不是符合要求的。大概这么理解就可以了。
如果你要官方一点的说法,可以百度一下,应该会有不少的了。

在电脑科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字串的单个字串。在很多文字编辑器或其他工具里,正则表示式通常被用来检索和/或替换那些符合某个模式的文字内容。许多程式设计语言都支援利用正则表示式进行字串操作。例如,在Perl中就内建了一个功能强大的正则表示式引擎。正则表示式这个概念最初是由Unix中的工具软体(例如sed和grep)普及开的。正则表示式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。

正则任意字符 正则表示式概述 什么是正则表示式

正则表示式,就是用某种模式去匹配一类字串的一个公式。一旦你弄懂它们,你就能把数小时辛苦而且易错的文字处理工作压缩在几分钟(甚至几秒钟)内完成。
在最简单的情况下,一个正则表示式看上去就是一个普通的查询串。例如,正则表示式"testing"中没有包含任何元字元,它可以匹配"testing"和"123testing"等字串,但是不能匹配"Testing"。

高阶Java开发中什么是正则表示式?

Java 正则表示式
正则表示式定义了字串的模式。
正则表示式可以用来搜寻、编辑或处理文字。
正则表示式并不仅限于某一种语言,但是在每种语言中有细微的差别。
Java正则表示式和Perl的是最为相似的。
java.util.regex包主要包括以下三个类:
Pattern类:
pattern物件是一个正则表示式的编译表示。Pattern类没有公共构造方法。要建立一个Pattern物件,你必须首先呼叫其公共静态编译方法,它返回一个Pattern物件。该方法接受一个正则表示式作为它的第一个引数。
Matcher类:
Matcher物件是对输入字串进行解释和匹配操作的引擎。与Pattern类一样,Matcher也没有公共构造方法。你需要呼叫Pattern物件的matcher方法来获得一个Matcher物件。
PatternSyntaxException:
PatternSyntaxException是一个非强制异常类,它表示一个正则表示式模式中的语法错误。
举例:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexMatches
{
public static void main( String args[] ){
按指定模式在字串查询
String line = "This order was placed for QT3000! OK?";
String pattern = "(.*)(\d+)(.*)";
建立 Pattern 物件
Pattern r = Pattern.pile(pattern);
现在建立 matcher 物件
Matcher m = r.matcher(line);
if (m.find( )) {
System.out.println("Found value: " + m.group(0) );
System.out.println("Found value: " + m.group(1) );
System.out.println("Found value: " + m.group(2) );
} else {
System.out.println("NO MATCH");
}
}
}

java 正则表示式是什么?

不同情况下的正则表示式:

匹配首尾空格的正则表示式:(^s*)|(s*$)。

匹配标签的正则表示式:<(.*)>(.*)</(.*)>|<(.*)/>。

配空行的正则表示式:n[s| ]*r。

整数或者小数:^[0-9]+.{0,1}[0-9]{0,2}$。

只能输入数字:"^[0-9]*$"。

只能输入n位的数字:"^d{n}$"。

只能输入至少n位的数字:"^d{n,}$"。

只能输入m~n位的数字:。"^d{m,n}$"

只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$"。

只能输入有两位小数的正实数:"^[0-9]+(.[0-9]{2})?$"。

只能输入有1~3位小数的正实数:"^[0-9]+(.[0-9]{1,3})?$"。

只能输入非零的正整数:"^+?[1-9][0-9]*$"。

只能输入非零的负整数:"^-[1-9][]0-9"*$。

只能输入长度为3的字元:"^.{3}$"。

只能输入由26个英文字母组成的字串:"^[A-Za-z]+$"。

只能输入由26个大写英文字母组成的字串:"^[A-Z]+$"。

只能输入由26个小写英文字母组成的字串:"^[a-z]+$"。

只能输入由数字和26个英文字母组成的字串:"^[A-Za-z0-9]+$"。

只能输入由数字、26个英文字母或者下划线组成的字串:"^w+$"。

验证使用者密码:"^[a-zA-Z]w{5,17}$"正确格式为:以字母开头,长度在6~18之间,只能包含字元、数字和下划线。

验证是否含有^%&',;=?$"等字元:"[^%&',;=?$x22]+"。

只能输入汉字:"^[u4e00-u9fa5]{0,}$"。

验证Email地址:"^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$"。

验证一年的12个月:"^(0?[1-9]|1[0-2])$"正确格式为:"01"~"09"和"1"~"12"。

验证一个月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正确格式为;"01"~"09"和"1"~"31"。

匹配中文字元的正则表示式: [u4e00-u9fa5]。

匹配双位元组字元(包括汉字在内):[^x00-xff]。

应用:计算字串的长度(一个双位元组字元长度计2,ASCII字元计1)String.prototype.len=function(){returnthis.replace(/[^x00-xff]/g,"aa").length;}。

什么是正则表示式平衡组

可以划分为三类:
1、起始标志
2、结束标志
3、除此之外的其它子串
记录一个位置,从这个位置开始遍历字串,最初是从字串起始位置开始的
遇到起始标志入栈,遇到结束标志出栈,在到达字元结尾或是栈中没有元素时仍要出栈操作时停止,判断匹配是否成功,如果栈不为空,则匹配失败,如果栈为空,则匹配成功!

  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码