Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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,我有一个正则表达式来删除推文中的所有用户名。看起来是这样的: regexFinder = "(?:\\s|\\A)[@]+([A-Za-z0-9-_]+):"; 我试图了解每个组件的功能。到目前为止,我有: ( Used to begin a “group” element ?: Starts non-capturing group (this means one that will be removed from the final result) \\s Ma

我有一个正则表达式来删除推文中的所有用户名。看起来是这样的:

regexFinder = "(?:\\s|\\A)[@]+([A-Za-z0-9-_]+):";
我试图了解每个组件的功能。到目前为止,我有:

(       Used to begin a “group” element
?:      Starts non-capturing group (this means one that will be removed from the final result)
\\s     Matches against shorthand characters
|       or
\\A     Matches at the start of the string and matches a position as opposed to a character
[@]     Matches against this symbol (which is used for Twitter usernames)
+       Match the previous followed by
([A-Za-z0-9- ]  Match against any capital or small characters and numbers or hyphens
不过最后一点我有点迷路了。谁能告诉我这是什么意思吗?我假设括号是组的结尾,但我没有得到冒号或加号


如果我对正则表达式的理解有任何错误,请随时指出

这个
+
实际上意味着它后面的“一个或多个”

在这种情况下,
[@]+
表示“一个或多个@符号”,而
[A-Za-z0-9-\+
表示“一个或多个字母、数字、破折号或下划线”。
+
是几个量词之一

结尾的冒号只是确保匹配的结尾有一个冒号

有时,查看可视化效果会有所帮助,以下是一个由以下内容生成的可视化效果:


这个
+
实际上意味着它后面的“一个或多个”

在这种情况下,
[@]+
表示“一个或多个@符号”,而
[A-Za-z0-9-\+
表示“一个或多个字母、数字、破折号或下划线”。
+
是几个量词之一

结尾的冒号只是确保匹配的结尾有一个冒号

有时,查看可视化效果会有所帮助,以下是一个由以下内容生成的可视化效果:


符号
+
表示“上一个字符可以重复1次或多次”。这与
*
符号形成对比,该符号表示“上一个字符可以重复0或更多次”。据我所知,冒号是文字,它与字符串中的文字
匹配。

符号
+
表示“前一个字符可以重复1次或多次”。这与
*
符号形成对比,该符号表示“上一个字符可以重复0或更多次”。就我所知,冒号是文字,它与字符串中的文字相匹配。

正则表达式中的加号表示“前一个字符或字符组的一次或多次出现”。因为第二个加号位于第二组括号内,它基本上意味着第二组括号与至少由一个小写或大写字母、数字或连字符组成的任何字符串相匹配


至于冒号,它在Java的正则表达式类中没有任何意义。如果您不确定,则已发现。

正则表达式中的加号表示“前一个字符或字符组的一次或多次出现”。由于第二个加号位于第二组括号内,它基本上意味着第二组括号与至少由一个小写或大写字母、数字或连字符组成的任何字符串相匹配

至于冒号,它在Java的正则表达式类中没有任何意义。如果您不确定,我们已经知道了。

好吧,我们拭目以待

[@]+                 any character of: '@' (1 or more times)
   (                 group and capture to \1:
    [A-Za-z0-9-_]+   any character of: (a-z A-Z), (0-9), '-', '_' (1 or more times)
   )                 end of capture group \1
   :                 look for and match ':'
可识别以下量词:

*      Match 0 or more times
+      Match 1 or more times
?      Match 1 or 0 times
{n}    Match exactly n times
{n,}   Match at least n times
{n,m}  Match at least n but not more than m times
好吧,我们拭目以待

[@]+                 any character of: '@' (1 or more times)
   (                 group and capture to \1:
    [A-Za-z0-9-_]+   any character of: (a-z A-Z), (0-9), '-', '_' (1 or more times)
   )                 end of capture group \1
   :                 look for and match ':'
可识别以下量词:

*      Match 0 or more times
+      Match 1 or more times
?      Match 1 or 0 times
{n}    Match exactly n times
{n,}   Match at least n times
{n,m}  Match at least n but not more than m times

在所有情况下,当在括号外且前面没有“+”表示“一个或多个紧挨着我的东西”
+
匹配紧跟在它前面的一个或多个东西。因此,
[A-Za-z0-9-\+
匹配至少一个字母数字字符、连字符或下划线的序列。在所有情况下,当在括号外且前面没有“\”时,+”表示“一个或多个紧挨着我的东西”
+
匹配紧跟在它前面的一个或多个东西。所以,
[A-Za-z0-9-畷]+
匹配至少一个字母数字字符的序列,连字符或下划线。那么问一下,这是否意味着它将遍历@语句之后的所有内容,直到找到不在图表组1中的内容,或者直到找到冒号?@AndrewMartin它将查找组1中的一个项目,直到它不匹配为止。然后它(这组字母/数字/连字符/下划线)后面必须跟一个冒号,否则它与regex.Perfect不匹配。谢谢你的好意explanation@AndrewMartin,没问题。还有,以防你好奇。如果您的group1也包含
,那么它不会吃掉结尾的冒号。例如,如果在“abadsf:sdfas:”上运行
([a-z:]+):
,则组将捕获“abadsf:sdfas”(不包括结尾的冒号)。如果你让它像
([a-z::+?):
一样非贪婪,它实际上首先会匹配“abadsf:”,而“abadsf”是group1。我想这并不是真的与你的问题有关:)抱歉,我想我已经道歉了。现在就完成了。那么试问一下,这是否意味着它将遍历@语句之后的所有内容,直到找到不在图表组1中的内容,或者直到找到冒号为止?@AndrewMartin它将查找组1中的一个项目,直到它不匹配为止。然后它(这组字母/数字/连字符/下划线)后面必须跟一个冒号,否则它与regex.Perfect不匹配。谢谢你的好意explanation@AndrewMartin,没问题。还有,以防你好奇。如果您的group1也包含
,那么它不会吃掉结尾的冒号。例如,如果在“abadsf:sdfas:”上运行
([a-z:]+):
,则组将捕获“abadsf:sdfas”(不包括结尾的冒号)。如果你让它像
([a-z::+?):
一样非贪婪,它实际上首先会匹配“abadsf:”,而“abadsf”是group1。我想这并不是真的与你的问题有关:)抱歉,我想我已经道歉了。现在就完成了。那么问一下,这是否意味着它将遍历@语句之后的所有内容,直到找到不在图表组1中的内容,或者直到找到冒号为止?那么问一下,这是否意味着它将遍历@语句之后的所有内容,直到找到不在图表组1中的内容,或者直到找到冒号为止