4 回答
TA贡献1805条经验 获得超9个赞
你可以使用
String regex = "#[^.#]*[^.#\\s][^#.]*\\.\\w+";
细节
#
- 一个#
符号[^.#]*
.
- 除and之外的零个或多个字符#
[^.#\\s]
- 任何字符,但.
,#
和空格[^#.]*
.
- - 除and之外的零个或多个字符#
\.
- 一个点\w+
- 1+ 个单词字符(字母、数字或_
)。
String s = "# #.id\nendpoint/?userId=#someuser.id\nHi #someuser.name, how are you?";
String regex = "#[^.#]*[^.#\\s][^#.]*\\.\\w+";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
System.out.println(matcher.group(0));
}
输出:
#someuser.id
#someuser.name
TA贡献1155条经验 获得超0个赞
重新定义的要求是:
找花样
#A.B
A
可以是任何东西,除了空格,也不能包含#
或.
B
只能是常规的 ASCII 字母或数字
将这些要求转换为(可能的)正则表达式:
#[^.#]+((?<!#\\s+)\\.)[A-Za-z0-9]+
解释:
#[^.#]+((?<!#\\s+)\\.)[A-Za-z0-9]+ # The entire capture for the Java-Matcher:
# # A literal '#' character
[^.#]+ # Followed by 1 or more characters which are NOT '.' nor '#'
( \\.) # Followed by a '.' character
(?<! ) # Which is NOT preceded by (negative lookbehind):
# # A literal '#'
\\s+ # With 1 or more whitespaces
[A-Za-z0-9]+ # Followed by 1 or more alphanumeric characters
# (PS: \\w+ could be used here if '_' is allowed as well)
测试代码:
String input = "endpoint/?userId=#someuser.id Hi #someuser.name, how are you? # .id #.id %^*#@*(.H(@EH Ok, # some spaces here .but none here #$p€©ï@l.$p€©ï@l that should do it..";
System.out.println("Input: \""+ input + '"');
System.out.println("Outputs: ");
java.util.regex.Matcher matcher = java.util.regex.Pattern.compile("#[^.#]+((?<!#\\s+)\\.)[A-Za-z0-9]+")
.matcher(input);
while(matcher.find())
System.out.println('"'+matcher.group()+'"');
在线尝试。
哪些输出:
Input: "endpoint/?userId=#someuser.id Hi #someuser.name, how are you? # .id #.id %^*#@*(.H(@EH Ok, # some spaces here .but none here #$p€©ï@l.$p€©ï@l that should do it.."
Outputs:
"#someuser.id"
"#someuser.name"
"#@*(.H"
"# some spaces here .but"
TA贡献1719条经验 获得超6个赞
您可以尝试以下正则表达式:
#(\w+)\.(\w+)
笔记:
如果您不想捕获任何组,请删除括号。
在你的java正则表达式字符串中你需要转义每一个
\
这给
#(\\w+)\\.(\\w+)
如果
id
仅由数字组成,则可以通过以下方式更改第二\w
个[0-9]
如果
username
包含除字母表、数字和下划线以外的其他字符,则必须更改\w
为具有明确定义的所有授权字符的字符类。
代码示例:
String input = "endpoint/?userId=#someuser.id Hi #someuser.name, how are you? # .id, #.id.";
Matcher m = Pattern.compile("#(\\w+)\\.(\\w+)").matcher(input);
while (m.find()) {
System.out.println(m.group());
}
输出:
#someuser.id
#someuser.name
TA贡献1789条经验 获得超10个赞
#(\w+)[.](\w+)
结果两组,例如
endpoint/?userId=#someuser.id -> group[0]=someuser and group[1]=id
添加回答
举报