Perl
RegEx和PCRE(与Perl兼容的RegEx)等具有简化的功能,\K
可以丢弃除捕获组之外左侧的所有匹配项,但是Java不支持它,那么Java等效于它吗?
没有直接的等价物 。但是,您始终可以使用 捕获组 重新编写此类模式。
如果仔细研究\K
运算符及其限制,您会发现可以使用 捕获组 替换此模式。
请参阅rexegg.com \K
参考:
在模式中间,
\K
说“将已报告比赛的开始重置到此点”。在\K
未报告之前匹配的任何内容,有点像是在后面。
\K
和后向之间的主要区别在于,在PCRE中,后向不允许您使用量词:寻找的长度必须是固定的。另一方面,\K
可以将其放置在模式中的任何位置,因此您可以在之前随意使用任何量词\K
。
但是 ,所有这些都意味着之前的模式\K
仍然 是一个消耗模式 ,即正则表达式引擎将匹配的文本加到匹配值上,并在匹配该模式时 提高其索引
,并且\K
仅从匹配中删除匹配的文本,将索引保持在它是。这意味着\K
没有比捕获组更好的方法了。
因此,value\s*=\s*\K\d+
PCRE / Onigmo模式将转换为以下Java代码:
String s = "Min value = 5000 km";
Matcher m = Pattern.compile("value\\s*=\\s*(\\d+)").matcher(s);
if(m.find()) {
System.out.println(m.group(1));
}
有一个替代方法,但是只能与更小,更简单的模式一起使用。甲约束宽度回顾后:
只要匹配字符串的长度在预定范围内,Java就会在后面的范围内接受量词。例如,
(?<=cats?)
之所以有效是因为它只能匹配三个或四个字符的字符串。同样,(?<=A{1,10})
是有效的。
因此,这也将起作用:
m = Pattern.compile("(?<=value\\s{0,10}=\\s{0,10})\\d+").matcher(s);
if(m.find()) {
System.out.println(m.group());
}
请参阅Java演示。
Perl RegEx和PCRE(与Perl兼容的RegEx)等都有这样的简写,可以丢弃左边的所有匹配项,但Java不支持它,那么Java的等价物是什么呢?
问题内容: 我必须在Python中基于PCRE解析一些字符串,而且我不知道该怎么做。 我要解析的字符串如下所示: 在此示例中,我必须获得以下不同项: 我发现与Python中的PCRE操作有关的唯一内容是以下模块:http : //pydoc.org/2.2.3/pcre.html(但它被编写为.so文件…) 您知道是否存在一些Python模块可以解析这种字符串吗? 问题答案: Python如何处理
正则表达式是一系列的字符串。这些包含超过其字面含义的字符串被称之为元字符。例如,一个符号前面的引用符代表一个人的言语能力,或者按照上面的说法,代表着meta-meaning[1]。正则表达式是一组字符串和(或者)一组匹配(特定的)模式的元字符。 一个正则表达式包含下面的一个或多个选项: 一组字符串。这是仅仅表示字面意思的字符串。最简单形式的正则表达式仅仅包含一组字符串。 一个锚字符。锚节点指定了正
问题内容: 所以我有一个像 2000cc车辆翻新发动机 我想把它变成 2000CC车辆翻新发动机 资本CC于2000CC。我显然不能这样做,因为它将所有出现的cc都替换为大写版本,因此加速器一词将成为加速器。在我的情况下,前四位将始终是四位,后跟字母cc,因此我认为可以使用正则表达式来完成。 我的问题是,在Java中,当cc跟随4位数字时如何将cc转换为CC并获得我期望的结果? 问题答案: 如果只
主要内容:实例,为什么使用正则表达式?,发展历史,应用领域除非您以前使用过正则表达式,否则您可能不熟悉一些术语。但是,毫无疑问,您已经使用过不涉及脚本的某些正则表达式概念。 例如,您很可能使用 ? 和 * 通配符来查找硬盘上的文件。? 通配符匹配文件名中的 0 个或 1 个字符,而 * 通配符匹配零个或多个字符。像 data(\w)?\.dat 这样的模式将查找下列文件: 使用 * 字符代替 ? 字符扩大了找到的文件的数量。data.*\.dat 匹配下
本文向大家介绍java正则表达式的简单运用,包括了java正则表达式的简单运用的使用技巧和注意事项,需要的朋友参考一下 本文为大家分享了如何运用java正则表达式的方法,供大家参考,具体内容如下 1.是否匹配给定的模型 代码如下: 运行结果如下: 2.替换 代码如下: 运行结果如下: 3.去重 代码如下: 运行结果如下: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程