Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.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,我知道这个问题已经在堆栈溢出问题上被问过很多次了,但是regex太难理解了 我尝试的是: String sentence = "The #{adjective} brown fox jumps over the lazy dog"; String requierd_sentence = sentence.replaceAll("[{*.*}]", "quick"); System.out.println(requierd_sentence); 在

我知道这个问题已经在堆栈溢出问题上被问过很多次了,但是regex太难理解了

我尝试的是:

String sentence = "The #{adjective} brown fox jumps over the lazy dog";
            String requierd_sentence = sentence.replaceAll("[{*.*}]", "quick");
            System.out.println(requierd_sentence);
在这个句子中,形容词不是固定位置的——它们随着每一个新的字符串/句子而变化。我需要做的是,将形容词替换为所需字符串,该字符串位于句子列之外的另一列中。所以从列中提取字符串是可以的,但是正则表达式匹配在很多尝试中都失败了

对于
{any string}
,什么是正确的正则表达式?

  • 上述字符串的示例输出是=
    敏捷的棕色狐狸跳过了懒狗。
  • 另一个输入示例,
    所有的{形容词}都不是金子
    应该输出
    所有闪光的都不是金子。
  • 现在上面的两个句子在句子的不同位置都有
    {形容词}
    ,所以我不能使用
    split
    。我必须使用正则表达式模式。

    您可以使用此模式(请参阅):

    这是如何工作的?

    • \\{
      与文本字符
      *{
    • [^}]*
      负字符类匹配任何不是右大括号的字符
    • }
      与右大括号匹配
    • 我们将所有这些替换为“快速”

    给出样本输入和输出。它比预期输出的多行解释更有意义。正确地转义
    [
    {
    句子。replaceAll(“\\[\{*.*}]”,“,quick”)
    。太棒了!它成功了,但解释不好。然而,3为你的精神干杯,你关心的不仅仅是给出答案,还要给出解释,这样人们才能学习。你能用更好的方式解释吗。@paul完全重写了解释。这对你有用吗?让我知道。:)谢谢,明白了。投票给演示,这是一个极好的例子要学习的东西
    regex
    String replaced = your_original_string.replaceAll("#\\{[^}]*}", "quick");