2012-04-03 137 views
-2

任何人都可以使用正则表达式模式来检查以下内容。正则表达式

  1. xxxxxxxxxxxxxxxxxxxxxxxxxx $ S
  2. xxxxxxxxxxxxxxxxxxxxxxxxxx $ S

线,$ somewhitespacesS结束。

我想用这个作为分隔符为stringscanner打破长字符串(在Java)

THX

+3

是的,我们可以帮助你。你到目前为止尝试过什么? [Here's](http://www.regular-expressions.info/tutorial.html)是一个很好的参考。 – Wiseguy 2012-04-03 15:10:57

+0

你使用哪种正则表达式?如果你打算在代码中使用它,什么语言? – Robbie 2012-04-03 15:13:28

回答

1

你可以使用这个表达式:

/\$\s+S$/ 

编辑:基于您的评论可能你需要这个:

int count = str.split("\\$\\s+S(\\n|$)").length; 

现在count将为您提供字符串str中以\\$\\s+S结尾的格式的数量(可选地后跟换行符或文本结尾)。

+0

这只会匹配行的末尾...不是整行,如指定的 – Robbie 2012-04-03 15:14:36

+0

希望您阅读此行:“以$ somewhitespacesS结尾的行” – anubhava 2012-04-03 15:15:39

+0

我做过了,它说“行”不是'$ S在行末'所以我假设他想匹配整个行。请注意,我并不打算把它变成与你的争论,我明白OP的问题有点含糊......所以我想我们都只是尽我们所能最好的 – Robbie 2012-04-03 15:16:52

1

更新:基于来自其他答案之一的评论。看起来你正试图计算最后有$ S的字符串中的行数。为此,您可以使用positive lookahead这样的:

.*(?=\$\sS) 

这里是一个将使用这个表达式对给定subjectString,并把所有的比赛到一个数组一些Java代码:

List<String> matchList = new ArrayList<String>(); 
Pattern regex = Pattern.compile(".*(?=\\$\\sS)"); 
Matcher regexMatcher = regex.matcher(subjectString); 
while (regexMatcher.find()) { 
    matchList.add(regexMatcher.group()); 
} 

如果再想要得到那些比赛的数量,你可以这样做:

int count = matchList.size(); 

如果subjectString等于:

xxxxxxxxxxxxxxxxxxxxxxxxxx $ S <-- Match 
xxxxxxxxxxxxxxxxxxxxxxxxxx  <-- No Match 
xxxxxxxxxxxxxxxxxxxxxxxxxx $ S <-- Match 

// count = 2 in this case 

您可以检出的this site一些很好的正则表达式的信息(或谷歌自己),而是帮助你理解这个特殊的正则表达式,这里有一些评论:

"." +  // Match any single character that is not a line break character 
"*" +  // Between zero and unlimited times, as many times as possible, giving back as needed (greedy) 
"(?=" +  // Assert that the regex below can be matched, starting at this position (positive lookahead) 
    "\\$" +  // Match the character “$” literally 
    "\\s" +  // Match a single character that is a “whitespace character” (spaces, tabs, and line breaks) 
    "S" +  // Match the character “S” literally 
")" 
0

您可以使用像这样:\\$\\s+S$