java - 编写一个Java正则表达式

标签 java regex

我在编写Java正则表达式时遇到问题,以下是匹配字符串的要求:

  • ' or abc :匹配
  • X' or abc :匹配
  • Good X' or abc :匹配
  • Good 'X' or abc : 不匹配

我正在使用 java.util.regex.Pattern 和 java.util.regex.Matcher。 match 表示 java.util.regex.Matcher.matches() 返回 true。

这是我写的正则表达式:".*((((?<!\\')[^\\s\\']+))[\\'\\s]+(or|and)).*" 。但它不起作用。

对于我的应用程序中的某些要求,我必须在正则表达式的开头和结尾使用“.*”

我是正则表达式新手,有人可以帮助我吗?

谢谢。

最佳答案

从您的示例中,我猜您正在尝试检查字符串中是否只有一个 '

正则表达式可以是^[^']*'[^']*$,使用matches方法可以简化为[^' ]*'[^']*:

  • [^']*:除 ' 之外的所有内容
  • ':A '
  • [^']*:除 ' 之外的所有内容
<小时/>
String[] a = {
    "' or abc",
    "X' or abc",
    "Good X' or abc",
    "Good 'X' or abc"
};

for (int i = 0; i < a.length; i++) {
    Pattern p = Pattern.compile("[^']*'[^']*");
    Matcher m = p.matcher(a[i]);
    System.out.println(m.matches());
}

输出:

true
true
true
false

但是,您不需要 PatternMatcher 来实现此目的,只需使用

yourString.matches("[^']*'[^']*");

关于java - 编写一个Java正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21431481/

相关文章:

regex - 用perl仅替换多个文件中的第一个匹配项

javascript - 为什么 JS RegEx 会提取多个值(只有一个匹配)?

c++ - 我应该如何提取此 url 获取字符串

java - 从下面的页面中提取段落的正则表达式

java - 在 C++ 中重叠类似 java 的接口(interface)

java - Aspose PPT/幻灯片中的页面设置

java - 移动到相邻空间拾取硬币的二维阵列游戏

java - 如何在java中使用TimeUnit

java - 使用 toArray() 方法引发的 ClassCastException

python - 在Python中使用正则表达式从文件名中获取剧集编号