海外主机测评

您现在的位置是:首页 > 国外服务器 > 正文

国外服务器

正则表达式生成算法(实现正则表达式)

cds8202023-02-05国外服务器274
本文给大家谈谈正则表达式生成算法,以及实现正则表达式对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录:1、正则表达式如何匹配3的倍数?2、请问JAVA中正则

本文给大家谈谈正则表达式生成算法,以及实现正则表达式对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录:

  • 1、正则表达式如何匹配 3 的倍数?
  • 2、请问JAVA中正则表达式匹配怎么实现的!
  • 3、算法和正则表达式的区别

正则表达式如何匹配 3 的倍数?

1. 用户给出你要学习的正则语言涉及的字符集,比如本题目中的 0123456789

2. 然后程序会反复询问你某个句子是否属于该语言,你就回答yes或者no就行了,然后程序会给你返回一个可能的正则语言(用DFA的形式)。

3. 如果你发现这个生成的正则语言和你想的不一样,你可以给出一个反例,然后程序继续给你计算你可能想要的自动机

这里有一个我刚刚写好的实现 xuanhuangyiqi/AnluinLearning · GitHub ,目前只能处理基本字符,另外这个算法输出的是自动机,不是最终的正则表达式,而且我还没找到比较完美的自动机转换成正则表达式的方法,所以目前我的实现生成的正则表达式是有bug的。本来这个东西是打算考完试再写的,刚好看到了这个问题,就手抖写了个简单的,考完试再慢慢完善。

如果打算理解这个算法可能需要一些基本的自动机理论基础:

1. 能看懂其它答案的做法,理解正则语言、DFA、正则表达式的关系

2. 理解最简DFA、状态/句子之间的等价

3. 理解这个算法的目标是维护一个自动机的封闭性和一致性

请问JAVA中正则表达式匹配怎么实现的!

Java中正则表达式匹配的语法规则:

以下是整理出来的Java下运用正则表达式实现匹配的程序案例,代码如下:

package?org.luosijin.test;

import?java.util.regex.Matcher;

import?java.util.regex.Pattern;

/**

?*?正则表达式

?*?@versiON?V5.0

?*?@author?Admin

?*?@date???2015-7-25

?*/

public?class?Regex?{

????/**

?????*?@param?args

?????*?@author?Admin

?????*?@date?2015-7-25

?????*/

????public?static?void?main(String[]?args)?{

????????Pattern?pattern?=?Pattern.compile("b*g");

????????Matcher?matcher?=?pattern.matcher("bbg");

????????System.out.println(matcher.matches());

????????System.out.println(pattern.matches("b*g","bbg"));

????????//验证邮政编码

????????System.out.println(pattern.matches("[0-9]{6}",?"200038"));

????????System.out.println(pattern.matches("//d{6}",?"200038"));

????????//验证电话号码

????????System.out.println(pattern.matches("[0-9]{3,4}//-?[0-9]+",?"02178989799"));

????????getDate("Nov?10,2009");

????????charReplace();

????????//验证身份证:判断一个字符串是不是身份证号码,即是否是15或18位数字。

????????System.out.println(pattern.matches("^//d{15}|//d{18}$",?"123456789009876"));

????????getString("D:/dir1/test.txt");

????????getChinese("welcome?to?china,江西奉新,welcome,你!");

????????validateEmail("luosijin123@163.com");

????}

????/**

?????*?日期提取:提取出月份来

?????*?@param?str

?????*?@author?Admin

?????*?@date?2015-7-25

?????*/

????public?static?void?getDate(String?str){

????????String?regEx="([a-zA-Z]+)|//s+[0-9]{1,2},//s*[0-9]{4}";

????????Pattern?pattern?=?Pattern.compile(regEx);

????????Matcher?matcher?=?pattern.matcher(str);

????????if(!matcher.find()){

????????????System.out.println("日期格式错误!");

????????????return;

????????}

????????System.out.println(matcher.group(1));????//分组的索引值是从1开始的,所以取第一个分组的方法是m.group(1)而不是m.group(0)。

????}

????/**

?????*?字符替换:本实例为将一个字符串中所有包含一个或多个连续的“a”的地方都替换成“A”。

?????*?

?????*?@author?Admin

?????*?@date?2015-7-25

?????*/

????public?static?void?charReplace(){

????????String?regex?=?"a+";

????????Pattern?pattern?=?Pattern.compile(regex);

????????Matcher?matcher?=?pattern.matcher("okaaaa?LetmeAseeaaa?aa?booa");

????????String?s?=?matcher.replaceAll("A");

????????System.out.println(s);

????}

????/**

?????*?字符串提取

?????*?@param?str

?????*?@author?Admin

?????*?@date?2015-7-25

?????*/

????public?static?void?getString(String?str){

????????String?regex?=?".+/(.+)$";

????????Pattern?pattern?=?Pattern.compile(regex);

????????Matcher?matcher?=?pattern.matcher(str);

????????if(!matcher.find()){

????????????System.out.println("文件路径格式不正确!");

????????????return;

????????}

????????System.out.println(matcher.group(1));

????}

????/**

?????*?中文提取

?????*?@param?str

?????*?@author?Admin

?????*?@date?2015-7-25

?????*/

????public?static?void?getChinese(String?str){

????????String?regex?=?"[//u4E00-//u9FFF]+";//[//u4E00-//u9FFF]为汉字?

????????Pattern?pattern?=?Pattern.compile(regex);

????????Matcher?matcher?=?pattern.matcher(str);

????????StringBuffer?sb?=?new?StringBuffer();

????????while(matcher.find()){

????????????sb.append(matcher.group());

????????}

????????System.out.println(sb);

????}

????/**

?????*?验证Email

?????*?@param?email

?????*?@author?Admin

?????*?@date?2015-7-25

?????*/

????public?static?void?validateEmail(String?email){

????????String?regex?=?"[0-9a-zA-Z]+@[0-9a-zA-Z]+//.[0-9a-zA-Z]+";

????????Pattern?pattern?=?Pattern.compile(regex);

????????Matcher?matcher?=?pattern.matcher(email);

????????if(matcher.matches()){

????????????System.out.println("这是合法的Email");

????????}else{

????????????System.out.println("这是非法的Email");

????????}

????}

}

算法和正则表达式的区别

算法和正则正则 这两者貌似没什么关系吧 . 算法是实现某种目的的过程.

在C语言里是一个函数 , java里是一个方法 , 正则表达式是一个匹配字符串的规则 , 一种模式.

正则当然是通过算法来实现的 , java里的Patter 类底层代码怎么实现正则的匹配功能?就是通过算法 .

比如 js里像这样一个正则: /\w{3}\d/ 表示匹配"3个字母一个数字"的字符串

正则的作用就是通过匹配来验证数据是否是指定的格式 , 比如在你注册帐号的时候匹配你的用户名密码是否按照要求填写 , 你的邮箱格式是否正确 , 还有就是正则可以方便的处理字符串的替换, 比如有的时候你得到一个几千行的字符串 你需要将每一行用引号引起来然后再末尾加个逗号 , 这时候手动处理的话要发疯 , 就可以用带有正则替换功能的工具处理 , 秒秒钟搞定,

程序里也一样,方便的替换掉匹配到的某些字符串.

本文关于正则表达式生成算法和实现正则表达式的内容来源于网络,版权归原作者所有,如有侵权,请联系删除!


【免备案CDN、高防CDN点击直达】


《正则表达式生成算法(实现正则表达式)》来自互联网同行内容,若有侵权,请联系我们删除!

发表评论

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~