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_Url - Fatal编程技术网

为什么Java正则表达式匹配下划线?

为什么Java正则表达式匹配下划线?,java,regex,url,Java,Regex,Url,我试图为任何数量的字符串匹配URL模式string.string.。第一次尝试使用^([^\\W\+.)([^\\W\+.)$,它可以匹配两个连续的模式。但是,当我将它推广到^([^\\W\]+)+$时,它停止工作,并匹配错误的模式“string.stru”。 您知道第二个版本有什么不正确吗?使用^([^\\W_]+)([^\\W_]+)$可以将任意两个单词与受限字符集进行匹配。尽管您没有逃过,但只要第一个单词首先匹配字符串,然后匹配任何文字(这就是unescaped的意思),然后再匹配字符串,

我试图为任何数量的
字符串匹配URL模式
string.string.
第一次尝试使用
^([^\\W\+.)([^\\W\+.)$
,它可以匹配两个连续的模式。但是,当我将它推广到
^([^\\W\]+)+$
时,它停止工作,并匹配错误的模式“string.stru”。 您知道第二个版本有什么不正确吗?

使用
^([^\\W_]+)([^\\W_]+)$
可以将任意两个单词与受限字符集进行匹配。尽管您没有逃过
,但只要第一个单词首先匹配
字符串,然后匹配任何文字(这就是unescaped
的意思),然后再匹配
字符串,它仍然有效

在后一种情况下,未缩放点(
)是捕获组的一部分,至少出现一次(因为您使用
+
),因此它允许任何字符作为除数。换句话说,
string.stru.
被理解为:

  • 字符串
    作为第一个单词
  • str
    作为第二个单词
  • ing
    作为第三个单词
。。。只要未缩放点(
)允许任何除数(字面上的

转义点以使正则表达式按预期()工作:


你需要逃离你的恐惧。字符,否则它将匹配任何字符,包括\

^([^\\W_]+\.?)+$

这可能是您的通用正则表达式

[^\W]似乎是一个奇怪的选择-它与“非单词字符”匹配。我还没有想清楚,但听起来好像它相当于\w,即匹配一个单词字符

无论哪种方式,使用^\W和\W,您都会要求匹配下划线-这就是它将字符串与下划线匹配的原因。“单词字符”是大写字母、小写字母、数字、和下划线


您可能需要[a-z]+或[a-Za-z0-9]+

请转义
,因为它是元字符。
\w
也包含下划线。另外,由于几年前URL可能包含Unicode字母。不,它不包含。
[]
的内容表示除
/
以外的任何内容都是字面意义上的(
/
)。
\W
(无论如何它应该是
\W
)不能作为
[a-zA-Z0-9\]
的快捷方式,因为最初的两个反斜杠(
\`)有自己的含义,
W
//code>W`字符保持不被替换。这三个字母应该包括在内才能生效(小写字母
w
)。给定的正则表达式中没有斜杠,只有反斜杠。我假设\\只是单个\的Java源代码语法。否则,表达式就很奇怪了-[^\\W\]+匹配除反斜杠、W和下划线之外的字符串。这很可能会给出所看到的结果,但这似乎不是一个有用的解析,我怀疑这是有意的。
^([^\\W_]+\.?)+$