我有一个形式的字符串:“CCCyyyyyyBBBCCCxxxxxCCCyyyyyCCCzzzzz1CCCrrrrrr”
我需要在BBB之后获得一些以CCC开头并以1结尾的子串(仅包括CCC一次)。我能写出什么正则表达式?
答案 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)/
(
和)
之间,以便您可以解析它。