Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.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,我正在学习regex,我编写了一个从字符串中获取数字的方法: replaceAll("[^\\d]",""); 上面的方法返回一个只有数字的字符串。 但我只得到一个正数。。。如果我想得到一个负数呢 所以,我试图改变模式,只考虑数字和字符“-”(仅在开始)。详情如下: replaceAll("[^\\d&&[^[^-]]",""); replaceAll("[^\\d]&&^[^-]",""); 还有其他几个。。。但是我没有得到我想要的结果。也许这是一个愚蠢的

我正在学习regex,我编写了一个从字符串中获取数字的方法:

replaceAll("[^\\d]","");
上面的方法返回一个只有数字的字符串。 但我只得到一个正数。。。如果我想得到一个负数呢

<>所以,我试图改变模式,只考虑数字和字符“-”(仅在开始)。详情如下:

replaceAll("[^\\d&&[^[^-]]","");

replaceAll("[^\\d]&&^[^-]","");
还有其他几个。。。但是我没有得到我想要的结果。也许这是一个愚蠢的错误,因为我不明白

那么,编写只在开头排除数字和“-”字符的正则表达式的正确方法是什么呢

示例:如果我输入:

$/65*(85gg78,     I get 658578.
2-340,            I get 2340, And:
-2-340,           I get -2340

谢谢

分两步进行,首先删除非数字,但留下减号,然后删除所有减号,除非它是第一个字符

String parsed = input.replaceAll("[^\\d-]","").replaceAll("(?<!^)-", "");

String parsed=input.replaceAll(“[^\\d-]”,“”)。replaceAll((?分两步执行,首先删除非数字,但保留减号,然后删除所有减号,除非它是第一个字符

String parsed = input.replaceAll("[^\\d-]","").replaceAll("(?<!^)-", "");
String parsed=input.replaceAll(“[^\\d-]”,“”)。replaceAll((?Try

基于以下输入文本:

$/65*(85gg78,
2-340,       
-2-340,      
正则表达式将匹配

65
85
78
2
-340
-2
-340
试一试

基于以下输入文本:

$/65*(85gg78,
2-340,       
-2-340,      
正则表达式将匹配

65
85
78
2
-340
-2
-340


&&
在正则表达式中没有意义。我仍然不确定您想要做什么。请包含一个“before and after”示例。例如,当
--28xxx8
中的第一个字符是
[^…]
中的第一个字符时,
[…]
中的其他地方是一个普通字符,而
之外的行开始时,
会发生什么[…]
@amadan
&&
是字符类的交叉点operator@Amadan我只是编辑了一些examples@Bohemian:TIL…显然只有Java和Ruby?很高兴知道。@Bohemian:在和中工作,但在或中不工作。另外,还说“Java和Ruby 1.9及更高版本支持字符类交集。”
&&
在正则表达式中没有意义。我仍然不确定您想要做什么。请包含一个“before and after”示例。例如,当
--28xxx8
中的第一个字符是
[^…]
中的第一个字符时,
[…]
中的其他地方是一个普通字符,而
之外的行开始时,
会发生什么[…]
@amadan
&&
是字符类的交叉点operator@Amadan我只是编辑了一些examples@Bohemian:TIL…显然只有Java和Ruby?很高兴知道。@Bohemian:在和中工作,但在或中不工作。另外,还说“Java和Ruby 1.9及更高版本支持字符类交集。”谢谢您的回答!但只有在开头有负号“-”并加上一个数字时,它才能正常工作,但在-2-3这样的情况下,我得到-2-3。如果您在开头指示只允许“-”,它将是
(?!^-\\d)\\D
@tdm是的,我假设那里最多有一个减号-这是您正在处理的一些非常混乱的输入。您希望为输入返回什么
“-2-3”
-
“-23”
?@tdm您的解决方案将
“foo-2-3”
转换为
“23”
。如果这不是您想要的,请参阅我编辑的答案,了解如何使其也起作用。@tdmsoares Yes
(?使用一种环视机制。更准确地说,它使用负环视机制。它只是确保我们匹配的
-
前面不会有
(?字符串的开头(由
^
表示)。有关环顾四周和第二部分的更多信息谢谢您的回答!但只有在开头有负号“-”和一个数字的情况下,它才能正常工作,但在-2-3这样的情况下,我得到-2-3。如果您在开头指示只允许“-”,则它将是
(?!^-\\d)\\D
@tdm是的,我假设那里最多有一个减号-这是您正在处理的一些非常混乱的输入。您希望为输入返回什么
“-2-3”
-
“-23”
?@tdm您的解决方案将
“foo-2-3”
转换为
“23”
。如果这不是您想要的,请参阅我编辑的答案,了解如何使其也起作用。@tdmsoares Yes
(?使用一种环视机制。更准确地说,它使用负环视机制。它只是确保我们匹配的
-
前面不会有
(?字符串的开头(由
^
表示)。有关查找和第二部分的更多信息我同意匹配比替换更好,但这并不是那么简单;在Java中,
matches()
要求正则表达式匹配整个字符串。为此,您需要
find()命令
方法,该方法只能在
Matcher
类中找到。@Alanmore,我同意。我只是在提示OP如何使用简单的正则表达式。但我将更新代码以备复制/粘贴:)我同意匹配比替换更好,但这并不是那么简单;在Java中,
matches()
希望正则表达式匹配整个字符串。为此,您需要
find()
方法,该方法只能在
Matcher
类中找到。@Alanmore,我同意。我只是给OP一个如何使用简单正则表达式的提示。但我会更新代码,以便复制/粘贴:)