Idea内使用正则表达式替换功能简记

Idea内使用正则表达式替换功能简记

前言:工作上遇见过需要对某个实体类对象进行批量替换的操作,在对象的属性比较少的时候可以ctrl+c/v很快速地进行替换,但是一旦对象的属性多起来,这种纯粹的机械式劳动就会耗费大量的时间。

本文记录一下自己在日常工作中采取的正则替换策略以及搜集到的正则表达式知识,以便更好地学习和理解正则表达式。

放上一个正则表达式入门教程:正则表达式30分钟入门教程 作者:deerchao


场景1:

现在有一个实体类,需要将属性值和属性名提取成json格式来编写api,成品格式为:

{
  "pageId": "页面ID",
  "pageName": "页面名称"
}

以下是实体类:


public class CmsPage {
	/**
	 * 页面名称、别名、访问地址、类型(静态/动态)、页面模版、状态
	 */
	//站点ID
	private String siteId;
	//页面ID
	private String pageId;
	//页面名称
	private String pageName;
	//别名
	private String pageAliase;
	//访问地址
	private String pageWebPath;
	//参数
	private String pageParameter;
	//物理路径
	private String pagePhysicalPath;
	//类型(静态/动态)
	private String pageType;
	//页面模版
	private String pageTemplate;
	//页面静态化内容
	private String pageHtml;
	//状态
	private String pageStatus;
	//创建时间
	private Date pageCreateTime;
	//模版id
	private String templateId;
	//参数列表
	private List<CmsPageParam> pageParams;
	//模版文件Id
    private String templateFileId;
	//静态文件Id
	private String htmlFileId;
	//数据Url
	private String dataUrl;

}


首先将这些属性复制到一个临时的json文件里,并调出替换框

在这里插入图片描述

这里我使用的匹配规则是:
\/\/(.*)\n(.*) (.*) (.*);
这条正则表达式的含义:正则表达式里面的符号都需要反斜杠来转义,所以\/就表示单条斜杠,(.*)匹配斜杠后面的字符串,\n匹配回车符。
\n匹配回车符会出现匹配不上的问题,可以打开文件→文件属性→行分隔符,选择LF或按照如下图进行设置。
在这里插入图片描述


句子中使用了4个(.*),属性中文名和英文名分别为第一个和第4个,所以在替换公式中可以用$1$4来代替,具体替换公式如下。
在这里插入图片描述
点击全部替换(replace All),然后加上花括号,就完成了。

在这里插入图片描述


嗯…… 看了会儿教程感觉自己对正则表达式的应用实在是太浅了,下面为正则表达式学习过程中的记录。


正则匹配中 ^ $\b 的区别

  • ^$分别代表字符串的开始和结束,因此^\d$只能匹配包含一个数字的字符串。
  • \b代表单词边界,其前后必须是不同类型的字符,可以组成单词的字符为一种类型,不可组成单词的字符(包括字符串的开始和结束)为另一种类型。
    因此\b\d\b可以匹配%3%中的3,但不能匹配23中的任意一个数字。
5   // ^\d$ 可匹配; \b\d\b可匹配
%2@!22$2$  // \b\d\b可匹配第一个和第四个2
264 //均不能匹配
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
和matcher.matches在Java的Matcher类中有什么区别? matcher.find()和matcher.matches()是Java中Matcher类的两个方法,用于在一个字符串中进行正则表达式的匹配操作。它们之间有一些区别: - matcher.find()方法是用来查找字符串中是否存在与正则表达式匹配的子串。它会从字符串的起始位置开始查找,一旦找到匹配的子串,就会返回true,并且可以通过matcher.group()方法获取匹配的子串。如果没有找到匹配的子串,则返回false。matcher.find()方法可以进行多次调用,每次调用都会从上一次匹配结束的位置开始查找下一个匹配的子串。 - matcher.matches()方法是用来判断整个字符串是否与正则表达式完全匹配。它会尝试将整个字符串与正则表达式进行匹配,如果字符串与正则表达式完全匹配,则返回true,否则返回false。与matcher.find()方法不同,matcher.matches()只会进行一次匹配,而不会找到所有的匹配子串。 举个例子,假设我们有一个字符串"abcccdefg",我们想要找到所有匹配正则表达式"c "的子串。如果我们使用matcher.find()方法,我们需要在一个while循环中连续调用matcher.find(),每次都可以找到一个匹配的子串,直到找不到匹配的子串为止。而如果我们使用matcher.matches()方法,它会尝试将整个字符串与正则表达式进行匹配,只有当整个字符串与正则表达式完全匹配,才会返回true。因此,在这个例子中,matcher.matches()方法将返回false,因为整个字符串并不完全匹配正则表达式"c "。 总结来说,matcher.find()方法用于查找字符串中是否存在与正则表达式匹配的子串,并可以找到所有的匹配子串,而matcher.matches()方法用于判断整个字符串是否与正则表达式完全匹配。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [matcher.find(); matcher.matches(); 两个方法有什么区别](https://blog.csdn.net/abckingaa/article/details/131676436)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Matcher类find方法简记](https://blog.csdn.net/weixin_50893467/article/details/130367726)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值