Jmeter - 在Beanshell中使用正则表达式(matcher()/pattern())会截断国际字符。

3

我需要从服务器响应数据中删减一些词语。

使用正则表达式提取器,我得到了以下结果:

<span class="snippet_word">Działalność</span> <span class="snippet_word">lecznicza</span>.</a>

我需要的只是:"Działalność lecznicza"

因此,我编写了一个Beanshell程序来执行此操作,但出现了问题,因为我得到了

"lecznicza lecznicza"

以下是我的程序:

import java.util.regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

String pattern = "\\w+(?=\\<)";
String co = vars.get("tresc");
int len  = Integer.parseInt(vars.get("length"));
String phrase="";
StringBuffer sb = new StringBuffer();

Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(co);

for(i=0; i < len ;i++){
if (m.find()){
strbuf = new StringBuffer(m.group(0));
} 
else {
phrase="notfound";
}

sb.append(" ");
sb.append(strbuf);
}

phrase = sb.toString();

return phrase;

我的源代码中提取了单词模式。Length告诉我要提取多少个单词。

程序适用于不带国际字符的短语。因此我认为编码存在问题,或者与此处有关:

Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(co);

但我不知道如何修改我的代码。

1个回答

2

\w 不能匹配 Unicode。为了在正则表达式中匹配 Unicode,您可以使用 \p{L}

String pattern = "\\p{L}+(?=\\<)";

虽然在这种情况下,我建议使用XML解析器,因为正则表达式完全不适合解析HTML/XML,如此帖子所述。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接