`
huangxuan2046
  • 浏览: 9988 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

java 正则中的正向预查的问题?

阅读更多
JDK版本1.6
正向预查的意思就是比如你要查  finds 中的find   按finds来查 但是真正的匹配结果又不算s
Pattern p = Pattern.compile("order\\s+by.+?(?=\\))");
//这个代码中的换成Pattern p = Pattern.compile("order\\s+by.+(?=\\))");结果依旧.(就是不要贪婪模式)
		String query="dfaf order by    hx    ) dfadf";
		Matcher m = p.matcher(query);
		while(m.find()){
			query=query.replace(m.group(),"");
			m.reset(query);
		}
		System.out.println(query);

运行上面这对代码期望是得到dfaf  dfadf  但是实际得到的是dfaf ) dfadf
首先怀疑是不是因为)是正则中的特殊符号(事实上已经加上\\处理过了)
然后稍稍改动代码
Pattern p = Pattern.compile("order\\s+by.+(?=m)");
		String query="dfaf order by    hx    m dfadf";
		Matcher m = p.matcher(query);
		while(m.find()){
			//System.out.println(m.toString());
			query=query.replace(m.group(),"");
			m.reset(query);
		}
		System.out.println(query);

这回匹配m字符
结果:运行上面这对代码期望是得到dfaf  dfadf  但是实际得到的是dfaf m dfadf
真不知道是怎么回事了。。。 难道是bug?
请各位看看我是不是对java中的正向预查理解有误
另外,试了下javascript中的正向预查
<script>
var sql="select dfd from dfa (order by hx) dfdf order by end";
var reg=/order\s+by.+(?=\))/;
alert(sql.replace(reg,""));
</script>

结果很正常:)被保留了
自己试着做个分页中出现的问题。。 GOOGLE一搜 到处都是正则的匹配语法,没有正向预查的例子 , 我想这些匹配的规定我都懂了。。。 没想到还有这么一个问题
分享到:
评论
3 楼 huangxuan2046 2009-09-09  
。。。。。。 我懂了。。。 唉 我傻了。
结果一直都是正常的。。  丢人了 我都不好意思谢谢楼上了。
2 楼 RednaxelaFX 2009-09-09  
楼主……
你先把最后在JavaScript里的正则表达式改回:/order\s+by.+?(?=\))/
然后把匹配的源字符串改回到:"dfaf order by    hx    ) dfadf"
然后你alert出来的结果就是:dfaf ) dfadf
跟JDK里的一模一样对吧?

其实JDK做的就是你在正则表达式里要求它的:在源字符串里寻找这样一个子串,开头是order,接着一个或多个空白字符,然后是by,然后是任意字符,直到匹配到这样一个位置,它的右边是一个右括号。既然匹配到的子串在最后的一个“位置”的右边是右括号,也就是说匹配内容不包括那个右括号,替换的时候自然就没有替换掉它了。如果顶楼最后一个例子就是你要的行为,那前面两个例子也一样是你要的行为……
1 楼 huangxuan2046 2009-09-09  
有没有人试过我的代码啊  你们结果是怎么样的?

相关推荐

    PHP正则之正向预查与反向预查讲解与实例

    了解正向预查&反向预查前,我们先要知道正则的2个函数:preg_match_all 、 preg_replace 正向预查&反向预查 ...一:PHP正则正向预查实例 PHP获取匹配实例 $str = 'XXXXjava6java7XXXX'; $perg = "/java(6|7)/

    java 正则匹配所有 {},并取出所有符合的字符串。

    要匹配所有在花括号中的字符串,我们可以使用正向预查 `(?&gt;\{)(.*?)(?&gt;\})`。这个正则表达式的含义是:查找所有以左大括号 `{` 开始,紧接着任何数量的任意字符(非贪婪匹配),然后以右大括号 `}` 结束的序列。 2...

    java正则表达式教程html版带目录

    =pattern)`:正向预查,确保接下来的字符匹配`pattern`,但不包含在结果中。 - `(?!pattern)`:负向预查,确保接下来的字符不匹配`pattern`。 7. **非贪婪匹配** - 使用`*?`、`+?`和`??`等量词可以使匹配尽可能少...

    Java正则表达式入门介绍课件

    =...)`正向预查,确保紧跟在其后的模式存在但不包括在匹配结果中。 - **后顾预查**:`(?!...)`负向预查,确保紧跟在其后的模式不存在。 - **非贪婪匹配**:通过在量词后面添加`?`,如`.*?`,使其尽可能少地匹配...

    java正则表达式帮助文档(全)

    Java正则表达式是编程语言Java中的一个强大工具,它用于模式匹配和字符串处理,广泛应用于数据验证、文本分析和Web开发等多个领域。在Java中,正则表达式通过`java.util.regex`包来实现,提供了`Pattern`、`Matcher`...

    java正则表达式的使用示例

    Java正则表达式是Java编程语言中的一个强大工具,它用于模式匹配和字符串处理。正则表达式(Regular Expression)是一串特殊的字符序列,可以用来匹配或查找其他字符串中的模式。在Java中,正则表达式的操作主要通过...

    JAVA正则表达式概述视频

    Java正则表达式是Java编程语言中的一个强大工具,用于处理字符串模式匹配和搜索替换操作。在本视频教程中,讲师逐步从基础到高级,详细介绍了Java正则表达式的使用方法,非常适合初学者入门。 首先,我们要理解正则...

    java正则表达式符号解释

    =pattern)` 正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。 * `(?!pattern)` 负向预查,在任何不匹配 pattern 的字符串开始处匹配查找...

    java正则表达式资料下载

    Java正则表达式是Java编程语言中用于处理字符串的强大工具,它允许程序员通过模式匹配来查找、替换或分割文本。正则表达式在各种场景下都有广泛应用,如数据验证、文本提取、日志分析等。Java中的正则表达式功能主要...

    java 正则替换 保留原值并增加' ',

    在Java编程中,正则表达式...总之,Java中的正则替换功能强大且灵活,结合正向预查和正向后顾等高级特性,我们可以实现复杂且精确的文本处理任务。在实际开发中,理解并熟练运用这些工具将极大地提升代码的效率和质量。

    java正则表达式检查

    Java正则表达式是编程语言Java中用于处理字符串的强大工具,它允许我们通过模式匹配来查找、替换或提取文本。这个“java正则表达式检查”小工具专门用于测试正则表达式的有效性,帮助开发者验证自己的正则表达式是否...

    Java正则表达式详解.pdf

    ### Java正则表达式详解:掌握文本匹配的艺术 正则表达式,又称正则规则或正则模式,是一种用于描述字符串结构的语法,被广泛应用于各种编程语言中,包括Java,用于文本处理、数据验证、搜索与替换等场景。本文将...

    Java正则表达式教程

    Java正则表达式是Java编程语言中用于处理字符串的强大工具,它允许程序员通过模式匹配来查找、替换或分割文本。本教程将深入讲解Java正则表达式的概念、语法以及常见用法,帮助开发者掌握这一核心技能。 在Java中,...

    java正则表达式从入门到精通

    Java正则表达式是Java编程语言中的一个强大工具,用于处理字符串匹配、查找、替换等操作。它基于Perl风格的正则表达式,为开发者提供了高效且灵活的文本处理能力。在这个“Java正则表达式从入门到精通”的主题中,...

    Java JS正则表达式大全

    在Java和JavaScript中,都有正向预查`(?=...)`和反向预查`(?!...)`,它们用来判断正则表达式之后是否跟有特定的模式,但不包含这部分匹配。例如,`/^\d+(?=px)$/`会匹配以数字开头,以"px"结尾的字符串,但不包含"px...

    Java正则表达式详解 doc格式文档

    Java正则表达式是一个强大且灵活的工具,通过理解并熟练运用字符类、量词、边界匹配、选择与分组等基本概念,以及预查、后顾和非贪婪匹配等高级特性,开发者可以处理复杂的文本匹配和处理任务。在实际编程中,结合...

    java代码-在线 java正则表达式测试工具,java正则测试,在线java正则匹配

    Java正则表达式是编程语言Java中用于处理字符串的强大工具,它允许程序员通过模式匹配来查找、替换或分割文本。在线Java正则表达式测试工具是开发者常用的辅助资源,可以帮助他们在编写和调试正则表达式时实时查看...

    java正则表达式详解java正则表达式详解

    Java正则表达式是Java编程语言中用于处理字符串的强大工具,它允许程序员通过模式匹配来查找、替换或分割文本。正则表达式(Regular Expression,简称regex)是一种由字符、元字符和操作符组成的模式,可以用来匹配...

    java正则表达式速查手册

    本速查手册旨在提供全面的Java正则表达式相关知识,帮助开发者快速理解和运用。 一、Java正则表达式基础 在Java中,正则表达式通常与`java.util.regex`包中的类一起使用,如`Pattern`和`Matcher`。`Pattern`类用于...

Global site tag (gtag.js) - Google Analytics