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中的内容,或者直到找到冒号为止