需要找到"变量"在一个字符串中。表示变量的是%[/ 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表达式实际上完全替换,只是为了找到其他代码并进行替换。我也没想到它会将%%转换为%,但不要理会这样,事后简单搜索%%就可以将它转换为%。
答案 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捕获变量捕获组: