`

正则表达式 之过滤注释

    博客分类:
  • Java
阅读更多

使用java 正则表达式如何过滤掉注释呢?

 如上图所示,如何去掉注释呢?

@Test
	public void test_deleteCommen(){
		String input="b<!-- step的属性seq是 从1 开始的正整数 -->a";
		System.out.println(input.replaceAll("<!--[^<>]*-->", ""));
	}

 运行结果:

 达到预期效果了.

但是

@Test
	public void test_deleteCommen(){
		String input="b<!-- >step的属性seq是 从1 开始的正整数 -->a";
		System.out.println(input.replaceAll("<!--[^<>]*-->", ""));
	}

 运行结果:

 没有达到预期的结果,为什么呢?因为注释中多了>

如何解决呢?

 

@Test
	public void test_deleteComment2(){
		String input="b<!-- >step的属性seq是 从1 开始的正整数 -->a";
		String regex="<!--"+ValueWidget.otherwise22("-->")+"-->";
		System.out.println(input.replaceAll(regex, ""));
	}

 运行结果:

ba

达到预期了.

方法otherwise22 的实现如下:

/***
	 * 不包含
	 * @param regex
	 * @return
	 */
	public static String otherwise22(String regex){
		int length=regex.length();//共有length * length种情况
		String[][] arr2=new String[length][];
		for(int i=0;i<length;i++){
			String[] arr3=new String[2];
			arr3[0]=String.valueOf(regex.charAt(i));
//			if(arr3[0].equals("*")){
//				arr3[0]="\\*";
//			}
			arr3[1]="[^"+arr3[0]+"]";
//			System.out.println(arr3[0]+" "+arr3[1]);
			arr2[i]=arr3;
		}
//		String[]result=new String[2^3];
//		for(int i=0;i<length;i++){
//			result[i]=arr2[i][0];
//		}
		//   \u4E00-\u9FA5 是为了匹配汉字
		String normal="[\\w\u4E00-\u9FA5\\s\"']*?";
		List<StringBuffer> list33=assemble(arr2,true);
		int length22=list33.size();
		StringBuffer sbu=new StringBuffer("(");
		for(int i=1;i<length22;i++){
			sbu.append(normal).append(list33.get(i)).append(normal);
			if(i!=length22-1){
				sbu.append("|");
			}
		}
		sbu.append(")");
//		System.out.println(list33);
		
		return sbu.toString();
		
	}

/***
	 * 
	 * @param a
	 * @param aa
	 * @param index : 初始值为0
	 */
	private static List<StringBuffer> cc(String[][] aa,int index,List<StringBuffer> list,boolean isDealRegex){
		
		if(index>=aa.length){//说明已经遍历完成
			return list;//并不是每次循环都会执行,最后才会执行此语句.
		}
		String cc[]=aa[index];
		int length=cc.length;
		List<StringBuffer> listNew=new ArrayList<StringBuffer>();
		if(list==null||list.size()==0){//首次循环
			for(int i=0;i<length;i++){//必须保证顺序,所以不能使用 foreach
				if(isDealRegex && cc[i].equals("*")){
					cc[i]="\\*";
				}
				if(isDealRegex){
					listNew.add(new StringBuffer(cc[i]+"?"));
				}else{
					listNew.add(new StringBuffer(cc[i]));
				}
				
			}
		}else{
			for(int i=0;i<length;i++){//必须保证顺序,所以不能使用 foreach
				for(int j=0;j<list.size();j++){//必须保证顺序,所以不能使用 foreach
					StringBuffer sb=list.get(j);
					StringBuffer sb2=new StringBuffer(sb);
					if(isDealRegex && cc[i].equals("*")){
						cc[i]="\\*";
					}
					if(isDealRegex  ){
						sb2.append(cc[i]+"?");
					}else{
						sb2.append(cc[i]);
					}
					listNew.add(sb2);
				}
			}
		}
		List<StringBuffer> list33=cc(aa, ++index, listNew,isDealRegex);
		if(!ValueWidget.isNullOrEmpty(list33)){
			return list33;
		}
		return null;
	}
	/***
	 * 组合
	 * @param aa
	 * @return
	 */
	public static List<StringBuffer>assemble(String[][] aa,boolean isDealRegex){
		return cc(aa, 0, null,isDealRegex);
	}

 

 源代码见附件io0007-find_progess-0.0.8.5-SNAPSHOT-sources.jar

 

  • 大小: 52.4 KB
  • 大小: 9.1 KB
  • 大小: 10.2 KB
分享到:
评论

相关推荐

    SQL 语法分析,正则表达式解析C#文件;正则表达式实现的语法分析引擎

    通过编写合适的正则表达式,开发人员可以高效地解析C#源代码中的特定结构,例如函数定义、类声明或注释。这在代码分析、自动化重构或自动生成文档时非常有用。 实现一个正则表达式解析引擎需要理解正则表达式的语法...

    正则表达式袖珍手册

    - **注释和模式变换**:某些语言支持在正则表达式中加入注释,或者改变匹配行为(如忽略大小写)。 - **分组、捕获、条件和控制**:通过圆括号`()`来分组子表达式,可以进行条件匹配或控制匹配行为。 - **Unicode...

    常用HTML正则表达式.doc

    这里的关键在于`/[\d]/g`这个正则表达式,表示匹配所有的非数字字符,并将其替换为空字符串,从而达到只允许数字输入的效果。 #### 三、只能输入全角字符的字段 对于需要输入全角字符的需求,可以采用如下代码: ...

    正则表达式练习文件(清洗)

    正则表达式是编程语言中用于处理字符串的强大工具,它在Python中主要通过`re`模块来实现。这个“正则表达式练习文件(清洗)”很可能是为了帮助学习者掌握正则表达式在数据清洗和网络爬虫中的应用。下面我们将深入探讨...

    正则表达式清除html标签

    1. **正则表达式**:是一种强大的文本匹配工具,它允许开发者定义复杂的搜索模式来查找、替换或处理文本中的字符串。 2. **HTML标签**:HTML(HyperText Markup Language)是用于创建网页的标准标记语言。HTML标签...

    js过滤HTML标签完整实例

    总结来说,JavaScript中使用正则表达式过滤HTML标签是一个实用的技术,它通过简单的规则匹配与替换机制,帮助我们清理从不可靠来源接收的数据,从而避免一些常见的安全问题。这种技术的应用不限于特定的场景,无论是...

    正则表达式和字符串处理.doc

    - **注释**:在正则表达式中添加注释以便理解和维护。 - **优先级顺序**:定义不同元素的优先级。 - **递归匹配**:允许正则表达式包含自身或类似的结构。 ### 2.1 元字符 元字符是在正则表达式中具有特殊意义的...

    Go-generate-运行生成递归一个指定路径或环境变量可以通过正则表达式过滤器

    本文将深入探讨`go generate`的使用,包括其基本原理、如何运行、递归执行以及通过正则表达式过滤器筛选文件。 ### `go generate`的基本概念 `go generate`是Go语言标准库中的一个命令,它并不直接生成代码,而是...

    php过滤HTML标签、属性等正则表达式汇总

    主要介绍了php过滤HTML标签、属性等正则表达式汇总,本文使用代码实例给出了过滤HTML内容的正则表达式,具体说明请参阅代码中的注释,本文对使用PHP做采集的朋友有比较大的作用,需要的朋友可以参考下

    正则表达式11

    9. **扩展模式**: 在某些实现中,如Perl或PCRE,可以开启扩展模式,允许在正则表达式中插入注释和空白以提高可读性。 掌握正则表达式不仅能够帮助我们在文本处理中高效地查找和替换信息,还能在编程语言中实现复杂...

    ASP正则表达式清除HTML指定标签的方法

    1. `Pattern`属性:这个属性用于设置要匹配的正则表达式模式,即用于过滤的HTML标签或属性的规则。 2. `IgnoreCase`属性:这个属性用于设置是否在匹配时忽略大小写。当我们不希望区分大小写时,可以将此属性设置为...

    c# 正则表达式对网页进行有效内容抽取

    1. 去除注释的正则表达式使用了 `&lt;!--` 和 `--&gt;` 作为匹配的开始和结束,中间可以包含任意数量的非`-`字符。这里使用了 `RegexOptions.IgnoreCase` 参数来忽略大小写,确保能匹配到所有情况的注释标记。 2. 去除...

    Java正则表达式使用

    在抓取网页中的电子邮件地址时,我们可以利用正则表达式的模式匹配功能,而在进行代码统计时,虽然通常不直接使用正则表达式,但它们在文件过滤和基本的行类型识别中依然发挥着作用。通过熟练掌握正则表达式,我们...

    PHP中过滤常用标签的正则表达式

    在PHP中,使用正则表达式来过滤HTML标签是常见的做法之一。本文将详细介绍如何使用PHP中的正则表达式来过滤特定的HTML标签,以增强网站的安全性和稳定性。 首先,我们要了解正则表达式(Regular Expression)是一种...

    Python使用正则表达式去除(过滤)HTML标签提取文字功能

    总结来说,这个例子展示了如何使用Python的正则表达式配合简单的字符串操作来过滤HTML标签,提取纯文本内容。然而,对于更复杂的需求,建议使用更为强大的HTML解析库,以获得更准确和可靠的结果。

    基于正则类sql注入防御的绕过技巧.pdf

    基于正则类sql注入防御的绕过技巧是指在SQL注入防御中,使用正则表达式来过滤恶意输入,以防止SQL注入攻击。然而,攻击者可以通过各种技巧来绕过这种防御机制,本文将对这些技巧进行介绍。 首先,我们需要了解SQL...

    schleichfahrt:一个简单的 bukkit 插件,用正则表达式过滤日志输出

    施莱希法尔特一个简单的 bukkit 插件,用正则表达式过滤日志输出。 插件文件夹中的文件“filters.txt”包含正则表达式过滤器,每行一个。 以#开头的行被视为注释,而不是过滤器。 正则表达式语法正是语法。 CI ...

    Python天气预报采集器实现代码(网页爬虫)

    爬虫简单说来包括两个步骤:获得网页文本、过滤得到数据。... 复制代码 代码如下: ... 使用正则表达式时需要仔细观察该网页信息的结构,并写出正确的正则表达式。 python正则表达式的使用也很简洁。我的上一篇文章《Pyth

Global site tag (gtag.js) - Google Analytics