正则表达式查找字符串

时间:2018-05-24 19:55:37

标签: java regex string regex-lookarounds regex-group

需要找到"变量"在一个字符串中。表示变量的是%[/ w] +%,catch是字符串中可以有多个变量:

%ABC%
%ABC%-%RED%
Lorem ipsum %GeT% sit amet, %% consectetur %QW23% elit. 

在第三个例子中,不应找到%%,它将替换为单个%。类似#[\ w + - ] +#之类的东西不起作用,因为它无法确定第二行是%ABC%和%RED%,而是% - %。我的印象是需要使用组和后引用,但我找不到任何好的例子来解释如何在Java中执行此操作。

人们正在寻求一些问题的答案,所以你走了:

我期待什么作为最终输出?那么,正如主题所暗示的那样,%ABC%是一个变量'在其他地方定义,最终目标是找到变量并用正确的值替换它#34;。正则表达式的目标是找到所有变量'在一个字符串中。

所以,在内存的某处有一张地图:

ABC = "mike"
RED = "Red Storm"
GeT = "hometown"
QW23 = "Quick and easy"

(旁注:如果密钥需要在名称周围有%,那也没关系)

正则表达式的目标是找到'变量,所以在第一个字符串中它会找到ABC(或%ABC%)以便代码并查找ABC来确定正确的值是mike,依此类推......这是给出的字符串所需的输出:

mike
mike-Red Storm
Lorem ipsum hometown sit amet, % consectetur Quick and easy elit. 

我不希望reg表达式实际上完全替换,只是为了找到其他代码并进行替换。我也没想到它会将%%转换为%,但不要理会这样,事后简单搜索%%就可以将它转换为%。

2 个答案:

答案 0 :(得分:1)

我相信你正在寻找正则表达式

(?<!%%)(?<=%)\w+(?=%)(?!%%)

这会找到每边都有一个%字符的变量。

测试正则表达式 here

Java代码:

final Pattern pattern = Pattern.compile("(?<!%%)(?<=%)\\w+(?=%)(?!%%)");
final Matcher matcher = pattern.matcher(input);

while (matcher.find()) {
    System.out.println(matcher.group(0));
}

测试Java代码here

<强>更新

如果您想按照以下评论中的要求捕捉群组,请使用以下模式:

(?<!%)(%)(\w+)(%)(?!%)

测试此模式 here

...和Java代码:

final Pattern pattern = Pattern.compile("(?<!%)(%)(\\w+)(%)(?!%)");
final Matcher matcher = pattern.matcher(input);

while (matcher.find()) {
    System.out.println(matcher.group(1) + " | " + 
                       matcher.group(2) + " | " + 
                       matcher.group(3));
}    

测试此代码 here

答案 1 :(得分:1)

如果您想匹配3个捕获组中的变量,并且您不想匹配wp_register_script( 'jquery1.11.1', 'http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js' , array(), null ); if (!is_admin()) { wp_add_inline_script( 'jquery1.11.1', 'var jquery1.11.1 = $.noConflict(true);' ); wp_enqueue_script( 'expand.js', get_template_directory_uri() .'/js/expand.js', array( 'jquery1.11.1' )); },则可以使用替换%%来匹配|并使用3捕获变量捕获组:

%%|(%)(\w+)(%)

Demo Java