4

我有一些这样的字符串:

text (255)
varchar (64)    
...

我想找出 ( 和 ) 之间的数字并将其存储在字符串中。也就是说,显然,将这​​些长度存储在字符串中。除了正则表达式解析部分之外,我已经弄清楚了其余的部分。我无法弄清楚正则表达式模式。

我该怎么做呢?

示例代码将如下所示:

Matcher m = Pattern.compile("<I CANT FIGURE OUT WHAT COMES HERE>").matcher("text (255)");

另外,我想知道是否有用于正则表达式解析的备忘单,从中可以直接获取正则表达式模式

4

5 回答 5

13

我会使用纯字符串匹配

String s = "text (255)";
int start = s.indexOf('(')+1;
int end = s.indexOf(')', start);
if (end < 0) {
    // not found
} else {
    int num = Integer.parseInt(s.substring(start, end));
}

您可以使用正则表达式,因为有时这会使您的代码更简单,但这并不意味着您在所有情况下都应该这样做。我怀疑这是一个简单的字符串 indexOf 和 substring 不仅会更快、更短,而且更重要的是更容易理解。

于 2013-07-30T19:02:00.680 回答
5

您可以使用此模式匹配括号之间的任何文本:

\(([^)]*)\)

或者这仅匹配数字(可能有空格填充):

\(\s*(\d+)\s*\)

当然,要在字符串文字中使用它,您必须转义\字符:

Matcher m = Pattern.compile("\\(\\s*(\\d+)\\s*\\)")...
于 2013-07-30T19:01:58.377 回答
2
Matcher m = Pattern.compile("\\((\\d+)\\)").matcher("text (255)");
if (m.find()) {
    int len = Integer.parseInt (m.group(1));
    System.out.println (len);
}
于 2013-07-30T19:02:39.807 回答
2
int index1  = string.indexOf("(")
int index2  = string.indexOf(")")

String intValue = string.substring(index1+1, index2-1);
于 2013-07-30T19:03:09.893 回答
2

这是一些示例代码:

import java.util.regex.*;

class Main
{
  public static void main(String[] args)
  {
    String txt="varchar (64)";

    String re1=".*?";   // Non-greedy match on filler
    String re2="\\((\\d+)\\)";  // Round Braces 1

    Pattern p = Pattern.compile(re1+re2,Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
    Matcher m = p.matcher(txt);
    if (m.find())
    {
        String rbraces1=m.group(1);
        System.out.print("("+rbraces1.toString()+")"+"\n");
    }
  }
}

这将打印出(int)它在输入字符串中找到的任何内容,txt.

正则表达式是\((\d+)\)匹配之间的任何数字()

于 2013-07-30T19:01:57.133 回答