正则表达式练习之贴吧实例(一)

news/2024/11/29 4:33:01/

注:以下实例均来自正则表达式贴吧真实需求。

题目:有一组文件格式是AAA-BBB.mp3,要求替换成BBB-AAA.mp3

JavaScript答案:

var str="AAA-BBB.mp3";
var pattern=/(\w+?)-(\w+?)\.mp3/g;
var s = str.replace(pattern, '$2-$1.mp3');
console.log(s);

Java答案:

public class Demo {public static void main(String args[]) {String str = "AAA-BBB.mp3";String pattern = "(\\w+?)-(\\w+?)\\.mp3";Pattern regex = Pattern.compile(pattern);Matcher matcher = regex.matcher(str);// $2表示第二个分组中的内容;$1表示第一个分组中的内容String result = matcher.replaceFirst("$2-$1.mp3");System.out.println(result);}
}

题目:要求把json字符串{"a"="123", "b"="12c", "c"="abc"}改成这样的格式:{a="123", b="12c", c="abc"}

JavaScript答案:

var str = '{"a"="123", "b"="12c", "c"="abc"}';
var pattern = /\"([a-zA-Z]+)\"(?=[=])/g;
var regex = new RegExp(pattern);
var result = str.replace(regex, function (item) {return item.replaceAll('\"', '');
});
console.log(result);

优化:

var str = '{"a"="123", "b"="12c", "c"="abc"}';
var pattern = /\"([a-zA-Z]+)\"(?=[=])/g;
var result = str.replace(pattern, '$1');
console.log(result);

Java答案:

public class Demo {public static void main(String args[]) {String str = "{\"a\"=\"123\", \"b\"=\"12c\", \"c\"=\"abc\"}";String pattern = "\"([a-zA-Z]+)\"(?=[=])";Pattern regex = Pattern.compile(pattern);Matcher matcher = regex.matcher(str);while (matcher.find()) {str = str.replaceAll(matcher.group(), matcher.group().replaceAll("\"", ""));}System.out.println(str);}
}

优化:

public class Demo {public static void main(String args[]) {String str = "{\"a\"=\"123\", \"b\"=\"12c\", \"c\"=\"abc\"}";String pattern = "\"([a-zA-Z]+)\"(?=[=])";Pattern regex = Pattern.compile(pattern);Matcher matcher = regex.matcher(str);String s = matcher.replaceAll("$1");System.out.println(s );}
}

题目:要求数值范围在[1-10000]之内(并且包含边界)并保留两位小数的正则表达式。

答案:\b([\d]{1,4}|10000)\.[\d]{1,2}\b

解释:可以匹配"1.00 56.96 555.11 10000.34 10001.56 123.345"中的"1.00""56.96""555.11""10000.34"。将小数点前面的部分分为两种情况处理:[1-9999]10000,因为10000只需要出现一次。

题目:要求以from开头,以end或over结尾

答案:^from.*?(end|over)$

解释:开头和结尾用^$符号即可,但(end|over)表示字符串"end""over",表示字符串的

题目:要求匹配文本

测试文本:

<span class=\"pl-c1\">https</span>:<span class=\"pl-c1\">//access.redhat.com/security/cve/cve-2009-0035</span></td>\n </tr>\n <tr>\n <td id=\"L10\" class=\"blob-num js-line-number\" data-line-number=\"10\"/>\n <td id=\"LC10\" class=\"blob-code blob-code-inner js-file-line\"><span class=\"pl-c1\">5050</span>\t<span class=\"pl-c1\">1</span>\t<span class=\"pl-c1\">2019-11-06T19</span>:<span class=\"pl-c1\">15Z</span>\t<span class=\"pl-c1\">CVE-2009-5050</span>\t<span class=\"pl-c1\">konversation \u306b\u304a\u3051\u308b\u5165\u529b\u78ba\u8a8d\u306b\u95a2\u3059\u308b\u8106\u5f31\u6027</span>\t<span class=\"pl-c1\">https</span>:<span class=\"pl-c1\">//bugs.kde.org/show_bug.cgi?id=219985</span>

中的超链接,例如:https://bugs.kde.org/show_bug.cgi?id=219985。

答案:<span class=\\"pl-c1\\">(http[s]?)</span>(:)<span class=\\"pl-c1\\">(.*?)</span>

解释:然后分别使用分组提取前三组就可以拼接成一个完整的超链接,Java代码如下:

public class Test01 {public static void main(String[] args) {String html="<span class=\\\"pl-c1\\\">https</span>:<span class=\\\"pl-c1\\\">//access.redhat.com/security/cve/cve-2009-0035</span></td>\\n </tr>\\n <tr>\\n <td id=\\\"L10\\\" class=\\\"blob-num js-line-number\\\" data-line-number=\\\"10\\\"/>\\n <td id=\\\"LC10\\\" class=\\\"blob-code blob-code-inner js-file-line\\\"><span class=\\\"pl-c1\\\">5050</span>\\t<span class=\\\"pl-c1\\\">1</span>\\t<span class=\\\"pl-c1\\\">2019-11-06T19</span>:<span class=\\\"pl-c1\\\">15Z</span>\\t<span class=\\\"pl-c1\\\">CVE-2009-5050</span>\\t<span class=\\\"pl-c1\\\">konversation \\u306b\\u304a\\u3051\\u308b\\u5165\\u529b\\u78ba\\u8a8d\\u306b\\u95a2\\u3059\\u308b\\u8106\\u5f31\\u6027</span>\\t<span class=\\\"pl-c1\\\">https</span>:<span class=\\\"pl-c1\\\">//bugs.kde.org/show_bug.cgi?id=219985</span>";Pattern pattern = Pattern.compile("<span class=\\\\\"pl-c1\\\\\">(http[s]?)</span>(:)<span class=\\\\\"pl-c1\\\\\">(.*?)</span>");Matcher matcher = pattern.matcher(html);while (matcher.find()) {// https://access.redhat.com/security/cve/cve-2009-0035// https://bugs.kde.org/show_bug.cgi?id=219985System.out.println(matcher.group(1)+matcher.group(2)+matcher.group(3));}}
}

题目:有一段文本[123]+[345].[789]*[111].[222].[333],要求取出[345].[789][111].[222]

答案:\[\d+\]\.\[\d+\]

解释:需要注意[]是元字符,必须进行转义。

题目:验证号码长度是9位还是10位,如果是10位则首字母必须是0。

答案:\b0?[\d]{9}\b

解释:文本如123456789 1234567890 0123456789会匹配第一项和第三项,注意正则表达式中用了边界条件\b,因为是测试文本是多个字符串,而实际运用中只会有一个字符串,可以去掉边界条件,当然有也不影响。

题目:匹配每个换行符之前最后一个中文符号之后的任意内容。

答案:[^\u4e00-\u9fa5]*(?<!\n)$

解释:注意,使用多行模式,例如匹配

sdfds中文xd123
123中xxx

中的xd123xxx,因为要匹配每一行最后一个中文符号之后换行符之前的任意内容。[\u4e00-\u9fa5]是用来匹配中文字符。

题目:以518、918、516、916这四组数字结尾的13位数字。

答案:\d{10}(518|918|516|916)

解释:还有更好的结果\d{10}[59]1[68]$

题目:识别字符串中恰好包含三个5的字符串,如a5b5c515552符合要求,而155535这种就不符合要求。

答案:^([^5]*5){3}[^5^\s]*$

解释:测试的文本如下:

152535
5556
aa5bb5cc5
56575859
155535

题目:要求匹配的字符串中不包含公司

答案:^(?!.*(公司|厂|部)).+$^([^(公司|厂|部)]*)$

解释:测试文本

测试
公司
新东方有限公司
大力加工厂
新闻部
大力出奇迹
公司之力

题目:abababa用aba匹配,实际上出现了三次,写正则表达式来匹配。

答案:(?=aba)

解释:利用断言来实现。

题目:要求匹配一个大于0小于等于24并且最多有两位小数的数字。

答案:^(24(\.0{1,2})?|(1[0-9]|[1-9]|2[0-3])(\.\d{1,2})?|0\.[1-9][0-9]?|0\.0[1-9])$

解释:其实是分为了几种情况来讨论:第一种情况,能匹配24或24.0或24.00,那么正则表达式是24(\.0{1,2})?;第二种情况,能匹配到0.10-0.99,那么正则表达式是0\.[1-9][0-9]?;第三种情况,能匹配到0.01到0.09,那么正则表达式是0\.0[1-9];第四种情况:能匹配到20.00到23.99,那么正则表达式是2[0-3](\.\d{1,2})?;第五种情况:能匹配到1.00到9.99,那么正则表达式是[1-9](\.\d{1,2})?;第六种情况:能匹配到10.00到19.99,那么正则表达式是1[0-9](\.\d{1,2})?。注意,都考虑到了小数点不存在、小数只存在一位的情况。

测试文本:

12.23
0
0.0
1.5
1.234
14.56
24.00
24.12
24
20.12
0.25
0.5
11
7
12.
0.01
0.50
1.50

题目:找出一段html文本中最后一个<br />之后的所有内容。

测试文本:

xxxxx<br /><p align="center"></p><p align="center"><br /></p>不管大公司还是小公司,都有可能是一个潜力股。<br />给公司取名给公司加分。<br />所以说公司取名,要重视。

答案:[^>]+$<br />(?!.*?<br)(.*?)$

解释:第一个答案要简洁得多;第二个答案用了断言和分组,还麻烦。


http://www.ppmy.cn/news/338385.html

相关文章

oracle聚簇和聚簇索引

Oracle聚簇索引的顺序就是数据的物理存储顺序&#xff0c;叶节点就是数据节点。非聚簇索引的顺序与数据物理排列顺序无关&#xff0c;叶节点仍然是索引节点&#xff0c;只不过有一个指针指向对应的数据块。一个表最多只能有一个聚簇索引。 聚簇是一种存储表的方法&#xff0c;这…

erlang基础练习题

erlang基础练习题 1、将列表中的integer,float,atom转成字符串并合并成一个字个字符串&#xff1a;[1,a,4.9,“sdfds”] 结果&#xff1a;“1a4.9sdfds”&#xff08;禁用 – append concat实现&#xff09; // An highlighted block spl([]) -> []; spl([H|T]) ->X i…

linux搭建java部署环境-docker

目录 一. Docker环境 二. JAVA环境安装 三. MySQL安装 四. Redis安装 五. Nginx安装 六.检查安装结果 七. 创建maven仓库 八. 项目打jar并发布 九. nginx反向代理 一. Docker环境 1. 查看linux内核版本: uname -a 2. 查看centos版本: cat /etc/redhat-release 3. 安…

企业微信开发/主要代码分享(前端)

前端起步 这次开发主要是自建应用/H5/Vue2 因为用的是自建应用H5&#xff0c;所以第一步考虑的是企微中jssdk的使用 1.利用vue的mixin方法和js类的方法写两个个公共组件&#xff08;可以下载任意目录下&#xff09; 首先是getAuth.js import { oauthUrl, oauthUser } from &q…

基于PHP的论文管理系统的设计与实现

目 录 论文总页数&#xff1a;27页 1 引言 1 2 系统需求 1 2.1 系统需求概述 1 2.2 系统详细需求分析 1 2.2.1 基于web开发 1 2.2.2 格式化文档 2 2.2.3 前台需求 2 2.2.4 性能需求 2 3 方案选择 2 3.1 方案比较 2 3.1.1 系统模式比较 2 3.1.2 程序语言选择与比较 3 3.1.3 数据…

自定义QCompleter,直接绑定QLineEdit,可默认选中,自动根据内容行数自动缩小高度

自定义QCompleter&#xff0c;直接绑定QLineEdit&#xff0c;可默认选中&#xff0c;自动根据内容缩小窗口&#xff0c;能设置最高显示行数&#xff0c;自动停靠。里面的duplicatelist是本人的特殊用途&#xff0c;正常情况下是不需要&#xff0c;也就构造函数最后一个参数其实…

紧急求助~~!!!

刚刚学了Java一个学期&#xff0c;刚刚对Java稍稍了解&#xff0c;老师就让我们完成一个课程设计题目。虽然应该可以编出来&#xff0c;但我现在真的没有什么思路&#xff0c;所以&#xff0c;紧急求助高手指点一二&#xff0c;帮帮在下吧&#xff0c;一个星期的时间就得上交了…

erlang练习题

-module(three). -export([]). %% 1、将列表中的integer,float,atom转成字符串并合并成一个字个字符串&#xff1a;[1,a,4.9,“sdfds”] 结果&#xff1a;“1a4.9sdfds” one([])->[]; one([H|T])-> if is_list(H)->Hone(T); true->lists:flatten(io_lib:format(&…