Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java正则表达式替换全部而不是替换所有单词_Java_Regex - Fatal编程技术网

Java正则表达式替换全部而不是替换所有单词

Java正则表达式替换全部而不是替换所有单词,java,regex,Java,Regex,我在Java中使用这个正则表达式已经有很长时间了,但无法使用它: (?:^| )(?:the|and|at|in|or|on|off|all|beside|under|over|next)(?: |$) 以下是: pattern.matcher("the cat in the hat").replaceAll(" ") 给我一顶帽子。另一个示例输入是下一顶帽子的猫入,它给了我下一顶帽子的猫 有什么方法可以让这个正则表达式替换工作,而不必为每个单词将它们分成多个单独的正则表达式,并尝试重复替换

我在Java中使用这个正则表达式已经有很长时间了,但无法使用它:

(?:^| )(?:the|and|at|in|or|on|off|all|beside|under|over|next)(?: |$)
以下是:

pattern.matcher("the cat in the hat").replaceAll(" ")
给我一顶帽子。另一个示例输入是
下一顶帽子的猫入
,它给了我
下一顶帽子的猫


有什么方法可以让这个正则表达式替换工作,而不必为每个单词将它们分成多个单独的正则表达式,并尝试重复替换一个字符串

是的,你可以很容易地做到这一点,你只需要使用它,这就是你想要描述的:
(?:^ |)
只需这样做:

\b(?:the|and|at|in|or|on|off|all|beside|under|over|next)\b
您的原始组未捕获,但如评论中所述,如果您想捕获选项,可以使用捕获组而不是非捕获组:

\b(the|and|at|in|or|on|off|all|beside|under|over|next)\b

您的问题是,前导空格和尾随空格包含在匹配项中,并且在两个匹配项中找不到字符

因此,在输入
的情况下,在\u hat中使用\u cat\u(下划线替换此处的空格,以使解释更清楚):

  • 第一个匹配:
    the
    ,剩余字符串:
    cat\u在\u帽子中
  • 第二个匹配:
    \u在
    中,剩余字符串:
    帽子
  • 不匹配
    ,因为它前面既没有空格,也没有(原始)字符串的开头
  • 您可以改为使用,因为它们的行为类似于条件(即,
    if
    ):


    (?您可能还需要匹配组:
    (\b(?:和|在|在|在|在|在|下|在|下|在|在|在|在|在|下|在|在|在|在|下|在|在|在|在|下|在|在|在|在|在|下|在|在|在\b
    @sp00m是的,这个答案应该随您的修复程序更新。我不需要知道删除了什么,这样我就可以不使用捕获组了。它可以工作,谢谢,但我真的不明白为什么原始组不工作。@frhd好吧,这一切取决于OP是否需要捕获数据;)这是一个很好的问题描述,我更喜欢我的最终解决方案,但+1,因为这是一个更好的答案。
    (?<=^| )(?:the|and|at|in|or|on|off|all|beside|under|over|next)(?= |$)