假设我有一个子字符串BB,它可以是单独的或是一个较长字符串的一部分,例如, BB或AA | BB | CC或BB | CC或AA | BB,即如果它后面跟有另一个子字符串,它必须用|隔开。我需要什么样的正则表达式才能在上面的任何一个中找到BB,而不是在说AABB?正则表达式找到子字符串
回答
如果你的字符串将被限制为字母数字字符,你CA使用:
\bBB\b
如果他们不这样做,你可以使用lookarounds模拟相同:
(?<=\||^)BB(?=\||$)
你子应该是前并在管道之后或靠近边缘。
“如果您的子字符串仅限于字母数字字符...” - * ASCII *字母数字,即。但我认为无论如何,这种环视方法更为正确。看看我的变化,但。这并不比你的更好,只是一个心灵扩张的练习。 ;) – 2011-06-04 20:06:54
不知道它是否是您想要的位置,但是这会捕获BB开始和结束的位置,如果BB后跟“|”或串的两端:
String data = "AA|BB|CCBBCC|BB";
Matcher m = Pattern.compile("(BB)(?:\\||$)").matcher(data);
while (m.find()) {
System.out.println(m.group(1) + " starts at " + m.start() + " ends at " + m.end(1));
}
你需要封闭前端和后端。就像这样,你的正则表达式将匹配'BBB','ABB','BBB | CC'等中的最后两个'B',我不认为OP需要这样做。 – 2011-06-04 19:53:45
不确定OP真正需要的是什么,但是他没有提到任何有关'ABB'中的'BB'是否应该匹配的内容。(是的,我的表情把它当作匹配) – Kaj 2011-06-04 20:25:29
这里的另一种选择:
Pattern p = Pattern.compile("(?<![^|])BB(?![^|])");
String[] input = { "AABB", "BB", "AA|BB|CC", "BB|CC", "AA|BBB", "BBB|AA" };
for (String s : input)
{
Matcher m = p.matcher(s);
System.out.printf("%-10s : %b%n", s, m.find());
}
输出:
AABB : false
BB : true
AA|BB|CC : true
BB|CC : true
AA|BBB : false
BBB|AA : false
这实际上是一样的@了Kobi的答案,但如果他的说法的BB
IS之前/后面跟着一个管道或字符串的开始/结尾,我做了一个等同的断言,说它没有在一个不是管道的字符之前/之后。
奇怪。我总是翻转查看字符串的开始/结束到相反的lookareand,但无法让这个工作。 (哦 - 我有'[^ |]'匹配换行符!) – Kobi 2011-06-04 20:42:18
是的,这也行得通。谢谢 – user580459 2011-06-09 16:48:49
- 1. 正则表达式使用正则表达式来找到子字符串
- 2. 正则表达式查找字符串
- 3. 如何找到子字符串使用正则表达式
- 4. 用java的正则表达式找到一个子字符串
- 5. 正则表达式从字符串中找到子
- 6. 如何找到正则表达式的子字符串
- 7. 正则表达式找到%PHP内的所有子字符串
- 8. PHP子字符串正则表达式
- 9. Oracle正则表达式子字符串
- 10. PHP正则表达式子字符串
- 11. js正则表达式在字符串中找到多个子字符串
- 12. jQuery正则表达式按子串查找字符串
- 13. Perl正则表达式用正则表达式的子串替换字符串
- 14. 正则表达式在字符串中查找字符串
- 15. 正则表达式:找到字符串,不串
- 16. 阶正则表达式:找到两个字符串之间串
- 17. 在字符串中查找通配符子字符串的正则表达式
- 18. 正则表达式从字符串中提取子字符串
- 19. 以编程方式查找字符串到正则表达式?
- 20. 正则表达式:找到字符串中数字的出现
- 21. 正则表达式在字符串中找到字
- 22. 正则表达式:找到字符串中的所有数字
- 23. 正则表达式正则表达式匹配字符串
- 24. 正则表达式的正则表达式的Java字符串
- 25. 正则表达式查找的子集输入字符串
- 26. Java正则表达式查找子字符串
- 27. 查找mysql中正则表达式子字符串的位置
- 28. 正则表达式查找子字符串
- 29. 查找子字符串和使用正则表达式,蟒蛇
- 30. 从字符串到正则表达式到新字符串
你是否试图找到一个字符串是否包含| BB |但不包括AABB,或者包含| BB |的字符串就够了忽略其余的?或者你想罚款所有| BB |的头寸在一个单一的字符串? – 2011-06-04 18:15:35
我不明白。你想找到那些后面跟着'|'的地方吗?或那些没有跟着'|'的人 – Kaj 2011-06-04 18:23:47
确保接受一个答案,如果有一个好的。它不需要是我的,但是一般情况下,如果你的答案满意,你就需要接受答案。 – 2011-06-08 18:44:57