正则表达式:如何使java将波兰语字母视为普通\w?
Java将波兰语字母视为正则表达式:如何使java将波兰语字母视为普通\w?,java,regex,Java,Regex,Java将波兰语字母视为而不是\w。 现在我不知道如何编写正则表达式来完成以下所有单元测试 如何更改语言之前的和语言之后的以完成测试: import java.util.regex.Matcher; import java.util.regex.Pattern; import org.junit.Test; import junit.framework.TestCase; public class tmpTest extends TestCase{ final String BE
而不是\w
。
现在我不知道如何编写正则表达式来完成以下所有单元测试
如何更改语言之前的和语言之后的以完成测试:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.junit.Test;
import junit.framework.TestCase;
public class tmpTest extends TestCase{
final String BEFORE_LANGUAGE = "(?<![\\w\\p{S}])";
final String AFTER_LANGUAGE = "\\d*((?![\\w\\p{S}])|(<))";
@Test
public void test1() {
// Given:
String language = ".net";
String text = "xxxxxxx xxx .net";
String regex = BEFORE_LANGUAGE + Pattern.quote(language) + AFTER_LANGUAGE;
// When:
Matcher m = Pattern.compile(regex).matcher(text);
// Then:
assertTrue(m.find());
}
@Test
public void test2() {
// Given:
String language = ".net";
String text = "xxxxxxx xxx .net<br>";
String regex = BEFORE_LANGUAGE + Pattern.quote(language) + AFTER_LANGUAGE;
// When:
Matcher m = Pattern.compile(regex).matcher(text);
// Then:
assertTrue(m.find());
}
@Test
public void test3() {
// Given:
String language = "c++";
String text = "xxxxxxx xxx c++";
String regex = BEFORE_LANGUAGE + Pattern.quote(language) + AFTER_LANGUAGE;
// When:
Matcher m = Pattern.compile(regex).matcher(text);
// Then:
assertTrue(m.find());
}
@Test
public void test4() {
// Given:
String language = "c";
String text = "xxxxxxx xxx c++";
String regex = BEFORE_LANGUAGE + Pattern.quote(language) + AFTER_LANGUAGE;
// When:
Matcher m = Pattern.compile(regex).matcher(text);
// Then:
assertFalse(m.find());
}
@Test
public void test5() {
// Given:
String language = "r";
String text = "xxxxxxx xxx różne";
String regex = BEFORE_LANGUAGE + Pattern.quote(language) + AFTER_LANGUAGE;
// When:
Matcher m = Pattern.compile(regex).matcher(text);
// Then:
assertFalse(m.find());
}
@Test
public void test6() {
// Given:
String language = "r";
String text = "xxxxxxx xxx r";
String regex = BEFORE_LANGUAGE + Pattern.quote(language) + AFTER_LANGUAGE;
// When:
Matcher m = Pattern.compile(regex).matcher(text);
// Then:
assertTrue(m.find());
}
}
import java.util.regex.Matcher;
导入java.util.regex.Pattern;
导入org.junit.Test;
导入junit.framework.TestCase;
公共类tmpTest扩展了TestCase{
_LANGUAGE=“(?”)之前的最后一个字符串;
字符串正则表达式=前\u语言+模式。引号(语言)+后\u语言;
//当:
Matcher m=Pattern.compile(regex).Matcher(text);
//然后:
assertTrue(m.find());
}
@试验
公共无效测试3(){
//鉴于:
String language=“c++”;
String text=“xxxxxxx xxx c++”;
字符串正则表达式=前\u语言+模式。引号(语言)+后\u语言;
//当:
Matcher m=Pattern.compile(regex).Matcher(text);
//然后:
assertTrue(m.find());
}
@试验
公共无效测试4(){
//鉴于:
String language=“c”;
String text=“xxxxxxx xxx c++”;
字符串正则表达式=前\u语言+模式。引号(语言)+后\u语言;
//当:
Matcher m=Pattern.compile(regex).Matcher(text);
//然后:
assertFalse(m.find());
}
@试验
公共无效测试5(){
//鉴于:
String language=“r”;
String text=“xxxxxxx xxx rżne”;
字符串正则表达式=前\u语言+模式。引号(语言)+后\u语言;
//当:
Matcher m=Pattern.compile(regex).Matcher(text);
//然后:
assertFalse(m.find());
}
@试验
公共无效测试6(){
//鉴于:
String language=“r”;
String text=“xxxxxxx xxx r”;
字符串正则表达式=前\u语言+模式。引号(语言)+后\u语言;
//当:
Matcher m=Pattern.compile(regex).Matcher(text);
//然后:
assertTrue(m.find());
}
}
根据,\p{IsAlphabetic}
匹配Unicode中被视为字母的任何内容
\w
还包括0-9
,因此您还需要将\d
放在字符类中
所以
要使\w
和其他支持Unicode的速记字符类将模式。Unicode\u character\u CLASS
标志传递给编译的模式:
Pattern.compile(regex, Pattern.UNICODE_CHARACTER_CLASS).matcher(text);
无需重写当前模式。\p{IsAlphabetic}
可能吗?是的,语言=“\\d*(?![\\p{IsAlphabetic}\\p{S}])后的最终字符串。\p{Alnum}
包括所有Unicode字符和十进制数字,如\w
模式。编译(regex,pattern.Unicode\u字符类)。匹配器(文本);
无需重写模式。(?U)\w
匹配所有Unicode字母和数字以及更多字符。
Pattern.compile(regex, Pattern.UNICODE_CHARACTER_CLASS).matcher(text);