相关疑难解决方法(0)

如何匹配,但不捕获正则表达式的一部分?

我有一个字符串列表.其中一些是形式123-...456.可变部分"......"可以是:

  • 字符串"apple"后跟连字符,例如 123-apple-456
  • 字符串"banana"后跟连字符,例如 123-banana-456
  • 一个空白字符串,例如123-456(注意只有一个连字符)

除"apple"或"banana"之外的任何单词均无效.

对于这三种情况,我想分别匹配"apple","banana"和"".请注意,我从不想捕获连字符,但我总是希望匹配它.如果字符串不是123-...456如上所述的形式,那么根本就没有匹配.

如何编写正则表达式来执行此操作?假设我有一种风格,允许前瞻,后视,环视和非捕获组.


这里的关键观察是,当你有"苹果"或"香蕉"时,你还必须有尾随连字符,但你不想匹配它.当您匹配空白字符串时,您不能使用尾随连字符.我认为,封装这个断言的正则表达式将是正确的.

regex

177
推荐指数
5
解决办法
14万
查看次数

正则表达式中的单词边界是什么?

我在Java 1.6中使用Java正则表达式(尤其是解析数字输出)并且找不到\b("单词边界")的精确定义.我假设这-12将是一个"整数字"(匹配 \b\-?\d+\b),但似乎这不起作用.我很想知道匹配空格分隔数字的方法.

例:

Pattern pattern = Pattern.compile("\\s*\\b\\-?\\d+\\s*");
String plus = " 12 ";
System.out.println(""+pattern.matcher(plus).matches());
String minus = " -12 ";
System.out.println(""+pattern.matcher(minus).matches());
pattern = Pattern.compile("\\s*\\-?\\d+\\s*");
System.out.println(""+pattern.matcher(minus).matches());
Run Code Online (Sandbox Code Playgroud)

返回:

true
false
true
Run Code Online (Sandbox Code Playgroud)

regex word-boundary

107
推荐指数
8
解决办法
12万
查看次数

标签 统计

regex ×2

word-boundary ×1