查找要在特定正则表达式中匹配的字符的索引

时间:2014-06-14 12:00:34

标签: java regex substring

我有一个以单词开头的字符串,我想创建一个从索引0开始并在下一个特殊字符的索引处结束的子字符串(space.,{{1 },!等...)。我如何用正则表达式做到这一点?我能获得第一个正则表达式匹配的索引吗?模式看起来怎么样?

提前致谢!

3 个答案:

答案 0 :(得分:1)

  

我如何使用正则表达式进行此操作?

您可以尝试这样的事情:

^.*?\p{Punct}
  • ^匹配字符串
  • 的开头
  • .*?匹配任何reluctantly
  • \p{Punct}匹配!"#$%&'()*+,-./:;<=>?@[]^_`{|}~
  • 之一

  

我可以获得第一个正则表达式匹配的索引吗?

通常,您可以使用Matcher#start获取正则表达式匹配的索引。

答案 1 :(得分:1)

以下打印字符串中包含单词部分的子字符串(\w表示包含数字的单词字符,而\W表示非单词字符):

Pattern p = Pattern.compile("(\\w+)[\\W\\s]*");
Matcher matcher = p.matcher("word!,(. [&]");
if(matcher.find()) {
    System.out.println(matcher.group(1));
}

输出:word

答案 2 :(得分:1)

您可以使用以下内容。

^\w+(?=\W)

<强>解释

^            # the beginning of the string
\w+          # word characters (a-z, A-Z, 0-9, _) (1 or more times)
(?=          # look ahead to see if there is:
  \W         #   non-word characters (all but a-z, A-Z, 0-9, _)
)            # end of look-ahead

示例

String s  = "foobar!";
Pattern p = Pattern.compile("^\\w+(?=\\W)");
Matcher m = p.matcher(s);

if (m.find()) {
  System.out.println("Start:" + m.start() + " End:" + m.end());
  System.out.println(m.group());
}