Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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,我是一个正则表达式新手,我不知道如何编写一个可以交换成对连续单词的正则表达式。例如,如果句子是“你们今天好吗”,那么结果应该是“你们今天好吗”您可以尝试使用正则表达式组,这样您的正则表达式就可以是(\b\w+\b)\s+(\b\w+\b),因此使用replaceAll可以: String str = "How are you today guys"; String regex = "(\\b\\w+\\b)\\s+(\\b\\w+\\b)"; System.out.println(str.rep

我是一个正则表达式新手,我不知道如何编写一个可以交换成对连续单词的正则表达式。例如,如果句子是
“你们今天好吗”
,那么结果应该是
“你们今天好吗”

您可以尝试使用正则表达式组,这样您的正则表达式就可以是
(\b\w+\b)\s+(\b\w+\b)
,因此使用replaceAll可以:

String str = "How are you today guys";
String regex = "(\\b\\w+\\b)\\s+(\\b\\w+\\b)";
System.out.println(str.replaceAll(regex, "$2 $1"));
输出

are How today you guys
意思是:

  • (\b\w+\b)
    捕获第一个单词
  • \s+
    后面跟一个或多个空格
  • (\b\w+\b)
    捕获第二个单词

编辑


或者,您可以使用
\\b(\\w+)\\s+(\\w+)\\b
来代替,这样做很好。

可能重复:(“[^']+?”)\s+([^”]+?(?>”)$我可以用replaceAll()来做吗java中的函数?谢谢@WiktorStribiżew这是正确的新东西:)它工作是因为
\w
\s
\s
\w
之间存在隐式的单词边界。实际上,单词边界和零宽度断言通常放在组外,因此
“\\b(\\w+)\\s+(\\w+)\\b”
应该是这里最好的。这是专家,你的分析非常好@WiktorStribiżew,我喜欢你的答案