帮助正则表达式

时间:2011-08-07 10:52:59

标签: regex string

我有一个形式的字符串:“CCCyyyyyyBBBCCCxxxxxCCCyyyyyCCCzzzzz1CCCrrrrrr”

我需要在BBB之后获得一些以CCC开头并以1结尾的子串(仅包括CCC一次)。我能写出什么正则表达式?

5 个答案:

答案 0 :(得分:1)

(?<=BBB.*)CCC(?:(?!CCC).)*1
例如,

将与.NET正则表达式引擎一起使用(它在lookbehind断言中使用无限重复)。

(?<=BBB.*)  # Assert that there is a "BBB" somewhere before in the string
CCC         # Match CCC
(?:         # Match...
 (?!CCC)    # ...unless the next character is at the start of another "CCC"...
 .          # any character
)*          # Do this any number of times
1           # Match a "1"

如果你的正则表达式引擎无法处理lookbehind断言,请使用

BBB.*?(CCC(?:(?!CCC).)*1)

并使用组1作为匹配结果。

答案 1 :(得分:1)

如果字符串中只有一个匹配项,那么一个简单的方法就是:

BBB.*(CCC[^1]*1)

因为.*贪婪CCC会匹配CCC的最后一次出现(后跟1),因此匹配的{{}之间不会有任何内容{1}}和CCC

答案 2 :(得分:0)

正则表达式的Javadoc实际上非常好。您是否查看了java.util.Pattern的文档? http://download.oracle.com/javase/1,5.0/docs/api/java/util/regex/Pattern.html

有了这个,你应该能够自己解决这个问题,同时理解它的工作原理: - )

祝你好运!

答案 3 :(得分:0)

不是我的代码 - 但这是一个很好的免费软件来测试你的regepx http://weitz.de/regex-coach/

答案 4 :(得分:-1)

/BBB.*(CCC.*1)/
  • 从BBB开始。
  • 然后出现CCC之前的事情。
  • 然后任何 CCC的东西(这样它在子字符串中不会出现多次)。
  • 然后是1。
  • 子字符串位于()之间,以便您可以解析它。