2017-05-08 60 views
0

我试图得到“@函数”和“@”为输入字符串之间的字符串之间字符串:获取Java中使用正则表达式的特殊字符

inputText = "@function square @default 2 @type Int @brief squares default number" 

将正则表达式表达是为了什么在'@function'和'@'之间获得文本?

为了以下(在Java中):

Pattern p = Pattern.compile(some magic regex expression...); 
Matcher m = p.matcher(inputText); 
functionName = m.group; 
System.out.println(functionName); 

打印 “广场”

+0

这将是'@ function',随后的零个或更多不是'@'的字母。 JavaDocs for Pattern解释有关字符类的问题:https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html – yshavit

回答

3

正则表达式:

@function(.*?)@

这应该放在 “广场” 进入第一捕获组。然后您可以使用Matcher.group(int)来抓取该组。正如在下面的代码: 返回以前的匹配操作期间由给定组捕获的输入子序列

functionName = m.group(1);

组(INT组)。

https://docs.oracle.com/javase/7/docs/api/java/util/regex/Matcher.html#group(int)

EDIT

加入 '\ s' 来修剪空白

https://regex101.com/r/PH54FV/1

+0

我收到异常:“线程中的异常”main“java .lang.IllegalStateException:找不到匹配 \t at java.util.regex.Matcher.group(Matcher.java:485)“不知道为什么。 – user2836816

+0

'if(m.find()){.... m.group(1)...} –

+0

白色空间逃逸的反斜杠需要逃脱。我删除了它们以帮助缓解一些混淆 – quackenator