0 0

求正则表达式高手100

求一条正则表达式,要求: 匹配前面有奇数个字符a的字符zhu, 如'aaxxzaddzhu'可匹配, 'aaxxzddzhu'不匹配,'azhu'匹配, 还请大神们帮忙啊。

问题补充:都没有人知道吗?都已经提高到最高分了啊
2012年11月15日 10:42

11个答案 按时间排序 按投票排序

0 0

采纳的答案

楼主试试这个正则吧,经我测试,完全满足你的要求(改自 Eastsun 提供的更正则):

(?<=^([^a]*a[^a]*)(a[^a]*a[^a]*)*)zhu$

2012年11月16日 10:35
0 0

正则验证:

var str1 = 'aaxxzaddzhu';  
var str2 = 'aaxxzddzhu';  
var str3 = 'xxzdadzhu';  
var reg = /^([^a]*a[^a]*)([^a]*a[^a]*a[^a]*)*(zhu)/;  
console.info(reg.test(str1)); // true  
console.info(reg.test(str2)); // false  
console.info(reg.test(str3)); // true 


看了你的评论,知道你想取出“zhu”这个值:
以下是javascript代码:
var str1 = 'aaxxzaddzhu';
var str2 = 'aaxxzddzhu';
var str3 = 'azhu';
var reg = /^([^a]*a[^a]*)([^a]*a[^a]*a[^a]*)*(zhu)/;
var r = reg.exec(str1);
if(r != null)
{
    console.info(r[3]); // r[3] = 'zhu'
}

以下是PHP代码:
$str1 = 'aaxxzaddzhu';
$str2 = 'aaxxzddzhu';
$str3 = 'azhu';
$reg = "/^([^a]*a[^a]*)([^a]*a[^a]*a[^a]*)*(zhu)/";
preg_match($reg, $str3, $matches);
if(!empty($matches))
{
	echo $matches[3]; // $matches[3] = 'zhu'
}

2012年11月16日 12:03
0 0

多次测试通过

var str1 = 'aaxxzaddzhu';
var str2 = 'aaxxzddzhu';
var str3 = 'xxzdadzhu';
var reg = /^([^a]*a[^a]*)([^a]*a[^a]*a[^a]*)*zhu/;
console.info(reg.test(str1)); // true
console.info(reg.test(str2)); // false
console.info(reg.test(str3)); // true

2012年11月16日 11:19
0 0

应该能满足你的需求了,给分吧哈哈!

package com.demo.gae.util;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String regex="(((aa)+)|(a+))[^a]*";
		String content="aaxxzddzhuarraaaaabbbbbaaacccaaaagggg";
		StringBuffer sb = new StringBuffer(); 
		Pattern pattern = Pattern.compile(regex,Pattern.DOTALL);
		Matcher matcher = pattern.matcher(content);
		while(matcher.find()) {
			String data=matcher.group(4);
			if(data!=null){
				matcher.appendReplacement(sb,data+"---");
				//matcher.appendReplacement(sb,matcher.group().replaceAll(data, "---"));
			}
		}
		matcher.appendTail(sb);
		content= sb.toString();
		System.out.println(content);
	}

}

2012年11月16日 10:04
0 0

我觉得你这个要求又不是通用的正则匹配。不如直接得到char数组。
for循环。加a数量统计。发现zhu,计算此时的统计值。是基数得到。
不知道aaazhuaaazhu后面的zhu算不算。
这时就是清空统计的问题。
这样的时间复杂度也是最低的。毕竟是个特殊匹配。又不需要回溯的。
我觉得这个做法比你正则来的要好。

2012年11月16日 09:33
0 0

呃,楼主可以试试这个:"([^a]*a[^a]*)(a[^a]*a[^a]*)*zhu"

下面的java程序可以用来测试,先贴出测试结果:

引用
future$ java RegexTest
Input: aaxxzaddzhu
yes
Input: aaxxzddzhu
no
Input: azhu
yes
Input: aaazhu
yes
Input: aaaaaaazhu
yes
Input: azazazazazhu
yes
Input: azazazazhu
no



import java.util.*;
import java.util.regex.*;

public class RegexTest {
    public static void main(String[] args) {
	String regex = "([^a]*a[^a]*)(a[^a]*a[^a]*)*zhu";
	Scanner sca = new Scanner(System.in);
	while(true) {
	    System.out.printf("Input: ");
	    String line = sca.nextLine();
	    System.out.printf(Pattern.matches(regex,line)?"yes\n":"no\n");
	}
    }
}

2012年11月15日 17:56
0 0

正则写错了,应该是"(?<=a+)zhu"

2012年11月15日 15:37
0 0

使用环视功能。
满足你要求的正则为 "(?<=a+)"

环视功能说明:
(?<=) 肯定逆序环视 子表达式能够匹配左侧文本(环视开始的位置是从当前匹配成功的位置算起)
(?<!) 否定逆序环视 子表达式不能匹配左侧方本
(?=) 肯定顺序环视 子表达式能够匹配右侧文本
(?!) 否定顺序环视 子表达式不能匹配右侧文本

2012年11月15日 15:36
0 0

^([a-z][a-z])*[a-z]zhu
只能是从开始位置匹配

2012年11月15日 12:44
0 0

出现"aaabzhua"  字符串不是"zhu"结尾的需要考虑吗?
出现"aazhuabbbzzhu"  字符串中有多个"zhu"怎么取舍?

如果是以"zhu"结尾的字符串判断其中"a"的个数

var array="dzhu".match(/[a]/ig);

2012年11月15日 11:54
0 0

不会。。。写个方法

1、截取‘zhu’前面字符串
2、判断截取的字符串包含的‘a’是否是奇数
搞定~

2012年11月15日 11:13

相关推荐

    grep、sed、awk、perl等对正则表达式的支持的差别

    在IT领域,文本处理是日常工作中不可或缺的一部分,而grep、sed、awk和perl这四个工具在处理文本时都广泛地使用了正则表达式。它们各自有着不同的特性和适用场景,理解它们之间的差异有助于我们更高效地进行文本操作...

    正则表达式素材5

    正则表达式是计算机科学中的一个重要概念,广泛应用于文本处理、数据验证、搜索与替换等多个领域。...同时,不断实践和调试正则表达式,将理论知识转化为实际技能,是成为一名正则表达式高手的关键步骤。

    正则表达式详解(20分钟看懂正则)

    ### 正则表达式详解 #### 一、正则表达式概述 正则表达式是一种强大的文本模式匹配工具,广泛应用于编程语言如Java中,用于...通过不断学习和实践,你可以成为一个正则表达式的高手,有效地处理各种文本数据挑战。

    unix下的正则表达式

    ### Unix下的正则表达式详解 正则表达式(Regular Expression),简称RE,是一种用于文本模式匹配的强大工具,尤其在Unix环境下,它被广泛应用于grep...在实践中不断尝试和优化正则表达式,是成为Unix高手的必经之路。

    正则表达式案例学习文档

    正则表达式是一种强大的文本处理工具,用于匹配、查找、替换和分析字符串模式。它在编程语言中广泛应用,包括C#。本教程旨在通过案例学习,帮助你提升至正则...通过不断学习和练习,你将逐渐成长为正则表达式的高手。

    delphi下使用正则表达式控件集

    在Delphi编程环境中,正则表达式是一种强大的文本处理工具,用于执行模式匹配和字符串操作。本篇文章将详细探讨在Delphi下使用...在实践中不断探索和学习,你将成为正则表达式的高手,为你的项目添加更多功能和价值。

    正则表达式之道.doc

    ### 正则表达式基础知识详解 #### 一、正则表达式概述 正则表达式是一种用于模式匹配的强大工具,广泛应用于文本处理领域。...希望本书能帮助读者在正则表达式的道路上越走越远,成为处理文本数据的高手。

    经典正则表达式+正则表达式检验器

    正则表达式(Regular Expression,简称regex)是用于匹配字符串的一种模式,广泛应用于文本处理、数据验证、搜索和替换等场景...通过不断实践和学习,你将能够运用正则表达式解决更多实际问题,成为处理字符串的高手。

    正则表达式30分钟入门教程

    正则表达式(Regular Expression,简称regex)是用于匹配字符串的一种模式,广泛应用于文本处理...不断练习,你将成为正则表达式的高手。现在,你可以尝试在自己的项目中应用这些基础知识,体验正则表达式的强大功能。

    正则表达式必知必会.zip

    正则表达式(Regular Expression,简称regex)是用于匹配字符串的一种模式,广泛应用于文本处理、数据验证、...通过阅读"正则表达式必知必会"这份教程,你将逐步掌握这些概念,并通过实践成为正则表达式运用的高手。

    Python文本处理高手:正则表达式的应用与实践

    在Python中,正则表达式是一种强大的文本...本文详细介绍了正则表达式的使用技巧和实际应用,希望能够帮助读者成为Python文本处理的高手。随着实践的深入,相信读者能够更加熟练地运用正则表达式解决各种文本处理问题。

    正则表达式(regular expression)手册(CHM)

    正则表达式,全称Regular Expression,是一种模式匹配语言,用于在文本中查找、替换或提取符合特定模式的字符串。它在IT行业中被广泛应用,包括数据验证、文本搜索与...不断地练习和实践,将使你成为正则表达式的高手。

    正则表达式帮助文档 正则表达式常见案例

    正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,用于匹配、查找、替换字符串模式。在编程和数据分析领域,它被广泛应用于...持续实践和查阅相关资料,将助你在短时间内成为正则表达式的高手。

    正则表达式基础学习笔记

    正则表达式(Regular Expression,简称regex)是用于匹配字符串的一种模式,广泛应用于文本处理、数据验证、搜索和替换等场景。...在实际应用中,不断实践和积累经验,是成为正则表达式高手的关键。

    正则表达式,正则表达式技巧

    正则表达式(Regular Expression,简称regex)是用于在文本中匹配...在实际应用中,不断地实践和调试正则表达式,将有助于你成为正则表达式的高手。学习正则表达式,不仅提升了编程技能,也增强了对文本数据的洞察力。

    最常用的正则表达式帮助文档

    最常用的正则表达式帮助文档 高手进阶必备

    运维看家本领之一:Shell脚本编程与正则表达式

    在IT行业中,运维人员的日常工作离不开自动化工具的使用,而Shell脚本编程和正则表达式无疑是运维工程师的必备技能。...通过不断积累和优化,运维人员的Shell脚本编程和正则表达式能力会逐渐提高,成为真正的运维高手。

    正则表达式(工具教程)

    正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,用于匹配、查找、替换等操作。在编程和数据分析领域,正则表达式扮演着不...记得不断实践和探索,逐渐积累经验,你就能成为正则表达式的高手。

    javascript正则表达式详解

    通过不断学习和实践,你可以更好地利用正则表达式解决各种文本处理问题,成为JavaScript编程的高手。对于初学者来说,这个"javascript正则表达式详解.chm"文件会是一个很好的学习资源,它应该包含了详细的解释、实例...

Global site tag (gtag.js) - Google Analytics