Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这个Java正则表达式代码在做什么?_Java_Regex - Fatal编程技术网

这个Java正则表达式代码在做什么?

这个Java正则表达式代码在做什么?,java,regex,Java,Regex,我刚刚在我们的代码库中的一个Utils类型类中找到了这个方法。它是很久以前由一位不再为我们工作的开发人员编写的。它到底在干什么?这是什么?!?当然,这里没有JavaDocs或注释 public static String stripChars(String toChar, String ptn){ String stripped = ""; stripped = toChar.replaceAll(ptn, "$1"); return stripped.trim(); }

我刚刚在我们的代码库中的一个Utils类型类中找到了这个方法。它是很久以前由一位不再为我们工作的开发人员编写的。它到底在干什么?这是什么?!?当然,这里没有JavaDocs或注释

public static String stripChars(String toChar, String ptn){
    String stripped = "";
    stripped = toChar.replaceAll(ptn, "$1");
    return stripped.trim();
}
提前谢谢

它只是用匹配字符的子集替换字符串,然后从两端修剪空格

例如

所以如果你想让一个单词被该单词的一系列数字所取代

使用正则表达式\b.*?\d*?\b

然后砰的一声,你的replaceAll方法会给出这些结果

hey123wow->123
what666->666
how888->888
$0指的是整个匹配字符串,即本例中的hey123wow、what666、how888

$1表示组,即本例中的\d*,即123666888

$2指的是本例中不存在的第二个组。

它只是用自己的匹配字符子集替换字符串,然后从两端修剪空格

例如

所以如果你想让一个单词被该单词的一系列数字所取代

使用正则表达式\b.*?\d*?\b

然后砰的一声,你的replaceAll方法会给出这些结果

hey123wow->123
what666->666
how888->888
$0指的是整个匹配字符串,即本例中的hey123wow、what666、how888

$1表示组,即本例中的\d*,即123666888


$2指的是本例中不存在的第二个组。

它本质上是一个很短的别名。这:

stripChars(a, b)
相当于:

a.replaceAll(b, "$1").trim()

实际上,这是一个很短的别名。这:

stripChars(a, b)
相当于:

a.replaceAll(b, "$1").trim()

作为参数方法传递的模式字符串似乎包含一个匹配的组,调用replace all将用与第一个组匹配的部分替换与paatern的整个匹配。您应该查找此方法的调用层次结构,以查找传递给该方法的一些正则表达式以及正在处理的字符串,

作为参数方法传递的模式字符串似乎包含一个匹配的组,调用replace all将用与第一个组匹配的部分替换与paatern的整个匹配。您应该查找此方法的调用层次结构,以查找传递给该方法的一些正则表达式以及正在处理的字符串,

它似乎将toChar中与正则表达式ptn匹配的所有内容替换为toChar中要匹配的第一个组

正则表达式具有组的概念,例如,匹配2012年并将其替换为1012年,或将2006年替换为1007年将前20年更改为10年,可以通过替换

第20年[0-9][9-9]与第20年$1匹配-也就是说,匹配整个字符串,然后将其替换为第20年,然后替换为第一组$1。小组是括号中的第一件事

无论如何,您的方法然后用正则表达式ptn中的第一个组替换toChar中与ptn匹配的所有内容。如此给定 2012年12月,第20年[0-9][9-9];您将只收到12条回复,因为整个文本将匹配并仅替换为第一组


然后它将跳转任何前导或尾随的空格。

它似乎将toChar中与正则表达式ptn匹配的所有内容替换为toChar中要匹配的第一个组

toChar.replaceAll(ptn, "$1");
正则表达式具有组的概念,例如,匹配2012年并将其替换为1012年,或将2006年替换为1007年将前20年更改为10年,可以通过替换

第20年[0-9][9-9]与第20年$1匹配-也就是说,匹配整个字符串,然后将其替换为第20年,然后替换为第一组$1。小组是括号中的第一件事

无论如何,您的方法然后用正则表达式ptn中的第一个组替换toChar中与ptn匹配的所有内容。如此给定 2012年12月,第20年[0-9][9-9];您将只收到12条回复,因为整个文本将匹配并仅替换为第一组

然后它将跳转任何前导或尾随的空格

toChar.replaceAll(ptn, "$1");
它用捕获的组$1替换了toChar中发生的所有ptn,我们不知道它在哪里

捕获组是括号内的模式:-

例如,在以下正则表达式中:-

\\d+cd

$0表示完全匹配 $1表示第一个捕获组\\d+ $2表示第二个捕获组cd

有关正则表达式的详细信息,请参阅以下链接:-

它用捕获的组$1替换了toChar中发生的所有ptn,我们不知道它在哪里

捕获组是括号内的模式:-

例如,在以下正则表达式中:-

\\d+cd

$0表示完全匹配 $1表示第一个捕获组\\d+ $2表示第二个捕获组cd

有关正则表达式的详细信息,请参阅以下链接:-


没有足够的信息说任何有用的话。ptn是一种模式、正则表达式和mat

字符串中该模式的代码将被$1替换。您需要知道的是,在replaceAll&trim的java文档中没有解释的内容是什么?了解函数的最佳方法是查看函数的使用方式。谢谢@ilcavero-但这是我们的代码库中的代码,不是Java SE API文档。@pnongrata:replaceAll&trim的Java文档没有足够的信息来说明任何有用的内容。ptn是一种模式,一个正则表达式,字符串中该模式的匹配项将被$1替换。您需要知道什么是replaceAll&trim的java文档中没有解释的?了解函数用途的最佳方法是查看函数的使用方式。谢谢@ilcavero-但这是我们的代码库中的代码,不是Java SE API文档。@pnongrata:Java文档的replaceAll&trimThank@Eric+1-我被$1甩了-这意味着什么?你能举例说明如何使用它吗?再次感谢!谢谢@Eric+1-我被1美元甩了-这意味着什么?你能举例说明如何使用它吗?再次感谢!谢谢@Vikdor+1-请看埃里克回答下的我的问题-我有同样的问题要问你!您可以使用此语法对正则表达式的部分进行分组,以引用与此部分匹配的内容。Rohit的回答下面有详细解释这一点的链接。谢谢@Vikdor+1-请看Eric回答下的我的问题-我有同样的问题要问你!您可以使用此语法对正则表达式的部分进行分组,以引用与此部分匹配的内容。Rohit在下面的回答中有详细解释这一点的链接。谢谢@Ben+1-所以如果我传递字符串s=RegexUtils.stripCharsyear 2012,第20年[0-9][9-9];,那会是什么?再次感谢!看起来s应该是12,因为它将匹配整个字符串,并用第一组替换为12。再次感谢@Ben,这是有意义的+1!我将重命名/重构这个方法。你愿意给它起个新的更好更精确的名字吗?我们很荣幸:-嘿,最具描述性的名称是replaceWithFirstGroup,虽然这肯定很无聊,不是吗?谢谢@Ben+1-所以如果我传递字符串s=RegexUtils.stripCharsyear 2012,第20年[0-9][9-9];,那会是什么?再次感谢!看起来s应该是12,因为它将匹配整个字符串,并用第一组替换为12。再次感谢@Ben,这是有意义的+1!我将重命名/重构这个方法。你愿意给它起个新的更好更精确的名字吗?我们很荣幸:-嘿,最具描述性的名字是replaceWithFirstGroup,虽然那肯定很无聊,不是吗?