Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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,注意:我的程序运行正常,我只是想解释一下原因 我有一个java程序,它读取一个文件,计算所述文件中的单词,并将单词和计数输出到另一个文件。在本文的第一部分中,我使用正则表达式替换任何字符(不是字母)并将其替换为空字符串 freq.add(in.next().replaceAll("[^A-Za-z]", "")); 但是,这并不能解释连字号,因此我将正则表达式更改为: freq.add(in.next().replaceAll("[^A-Za-z_-]", "")); 我的问题是,为什么添加

注意:我的程序运行正常,我只是想解释一下原因

我有一个java程序,它读取一个文件,计算所述文件中的单词,并将单词和计数输出到另一个文件。在本文的第一部分中,我使用正则表达式替换任何字符(不是字母)并将其替换为空字符串

freq.add(in.next().replaceAll("[^A-Za-z]", ""));
但是,这并不能解释连字号,因此我将正则表达式更改为:

freq.add(in.next().replaceAll("[^A-Za-z_-]", ""));
我的问题是,为什么添加下划线和连字符有效?下划线字符背后的含义是什么

当我提问时,正则表达式对所有语言都是一样的吗


另外,如果这在其他地方得到了回答,我很抱歉,我做了多次搜索,但都没有运气。

正则表达式中的下划线没有什么特殊之处,它只是一个普通字符,如a。字符类末尾的连字符也不特殊,尽管它位于其他两个字符之间,因为你用它来匹配所有的字母,比如说A-Z


正则表达式在大多数语言中都是相似的,但是一些更深奥的特性可能与语言不同或缺失。

下划线是文字下划线字符,简单地说。@hwnd那么我的代码中需要它吗?它不是因为
-
而捕获你的连字符文本,而是因为
-
。请尝试
[^A-Za-z-]
并查看。此外,还有一些regex的变体,但大多数是可以相互理解的。查看一些漂亮的帮助和解释。以您的示例为例进行探索。注意:
-
在正则表达式字符类中是特殊的。当它不是类中的最后一个字符(首字母可能也是合法的)时,它是范围字符(这使得类似
a-z
的字符表示所有小写ASCII字母),除非转义。@Shawn Mehan它在带下划线和不带下划线的情况下都有效。请提供一条线索,说明为什么否决了它?错了吗?如果是这样的话,我想更正一下。你的回答并不比评论更具体。如果你要给出一个答案,至少要有实质性的回答。也许你可以参考regex的不同之处和风格。也许可以列出字符类、下划线和连字符的替代形式。一些基本上不会重复评论的东西。我在发布评论时发布了我的答案(注意它们彼此之间的间隔不到一两分钟),当我开始时,没有任何评论。将来,我会在输入答案后刷新,然后再发布以检查这种情况。谢谢