Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.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,我有这个字符串: Test 123 ${tag1} lorem ipsum ${tag2} ${tag3; tag4} ${tag5; tag6} dixit lorem ${tag7} dixit lorem ${tag8}. 我希望使用正则表达式只选择${tag;tag}之间的文本 我试过这个: \$\{(.*?)(; )(.*?)} 但我不能得到我所期望的。 有什么建议吗? 如果${…;…}中的内部文本不能包含{、}和,请感谢使用否定字符类解决方案: \$\{([^;{}]*);\s*

我有这个字符串:

Test 123 ${tag1} lorem ipsum ${tag2} ${tag3; tag4} ${tag5; tag6} dixit lorem ${tag7} dixit lorem ${tag8}.
我希望使用正则表达式只选择${tag;tag}之间的文本

我试过这个:

\$\{(.*?)(; )(.*?)}
但我不能得到我所期望的。 有什么建议吗?
如果
${…;…}
中的内部文本不能包含
{
}
,请感谢使用否定字符类解决方案:

\$\{([^;{}]*);\s*([^{};]*)}

如果计划只匹配单词字符,您可以将其简化为

\$\{(\w+)\s*;\s*(\w+)}

详细信息

  • \$\{
    -a
    ${
    子字符串
  • ([^;{}]*)
    -第1组:除
    {
    }
    (\w+
    将匹配1个或多个单词字符、字母、数字、下划线)以外的任何0+字符
  • \s*;\s*
    -a
    包含0+空格
  • ([^;{}]*)
    -第2组:除
    {
    }
    以外的任何0+字符
  • }
    -a
    }
    字符
:

输出:

${tag3; tag4}
tag3
tag4
=== END OF MATCH ===
${tag5; tag6}
tag5
tag6
=== END OF MATCH ===

非常感谢你!是工作和解释是可怕的!再次感谢。
${tag3; tag4}
tag3
tag4
=== END OF MATCH ===
${tag5; tag6}
tag5
tag6
=== END OF MATCH ===