任何简单的unicode字符串(例如زسس
或یسیتنانت
)都使用以下模式在c#正则表达式中匹配,但在Java中不匹配。
谁能解释一下?我如何对其进行纠正才能使其在Java中工作?
"\\b[\\w\\p{M}\\u200B\\u200C\\u00AC\\u001F\\u200D\\u200E\\u200F]+\\b"
C#代码:(它匹配字符串)
private static readonly Regex s_regexEngine;
private static readonly string s_wordPattern = @"\b[\w\p{M}\u200B\u200C\u00AC\u001F\u200D\u200E\u200F]+\b";
static PersianWordTokenizer()
{
s_regexEngine = new Regex(s_wordPattern, RegexOptions.Multiline);
}
public static List<string> Tokenize(string text, bool removeSeparators, bool standardized)
{
List<string> tokens = new List<string>();
int strIndex = 0;
foreach (Match match in s_regexEngine.Matches(text))
{
//Enter in this block
}
Java代码:(它与字符串匹配)
private static final String s_wordPattern = "\\b[\\w\\p{M}\\u200B\\u200C\\u00AC\\u001F\\u200D\\u200E\\u200F]+\\b";
static
{
s_regexpattern = Pattern.compile(Pattern.quote(s_wordPattern));
}
public static java.util.ArrayList<String> Tokenize(String text, boolean removeSeparators, boolean standardized)
{
java.util.ArrayList<String> tokens = new java.util.ArrayList<String>();
int strIndex = 0;
s_regexEngine=s_regexpattern.matcher(text);
while(s_regexEngine.find())
{
// it dosnt enter in this block
}
c#参考方案
查看“任何字母” Unicode字符类\ p {L}或Java Pattern.compile方法的Pattern.UNICODE_CHARACTER_CLASS参数。
我想第二个,仅仅是Java,不会引起您的兴趣,但是值得一提。
import java.util.regex.Pattern;
/**
* @author Luc
*/
public class Test {
/**
* @param args
*/
public static void main(final String[] args) {
test("Bonjour");
test("یسیتنانت");
test("世界人权宣言 ");
}
private static void test(final String text) {
showMatch(Pattern.compile("\\b\\p{L}+\\b"), text);
showMatch(Pattern.compile("\\b\\w+\\b", Pattern.UNICODE_CHARACTER_CLASS), text);
}
private static void showMatch(final Pattern pattern, final String text) {
System.out.println("With pattern \"" + pattern + "\": " + text + " " + pattern.matcher(text).find());
}
}
结果:
With pattern "\b\w+\b": Bonjour true
With pattern "\b\p{L}+\b": Bonjour true
With pattern "\b\w+\b": یسیتنانت true
With pattern "\b\p{L}+\b": یسیتنانت true
With pattern "\b\w+\b": 世界人权宣言 true
With pattern "\b\p{L}+\b": 世界人权宣言 true
当回复有时是一个对象有时是一个数组时,如何在使用改造时解析JSON回复? - java我正在使用Retrofit来获取JSON答复。这是我实施的一部分-@GET("/api/report/list") Observable<Bills> listBill(@Query("employee_id") String employeeID); 而条例草案类是-public static class…
正则表达式提取两个字符之间的字符串 - java我想使用Java中的regex提取给定字符串中以下字符之间的字符串:/* 1) Between \" and \" ===> 12222222222 2) Between :+ and @ ===> 12222222222 3) Between @ and > ===> 192.168.140.1 */ Strin…
java.net.URI.create异常 - javajava.net.URI.create("http://adserver.adtech.de/adlink|3.0") 抛出java.net.URISyntaxException: Illegal character in path at index 32: http://adserver.adtech.de/adlink|3.0 虽然n…
春天的多属性文件 - java我在spring中加载属性文件: <context:property-placeholder location="classpath:foo.properties"/> 但是,如果我尝试在另一个上下文文件中加载另一个文件,则会出现错误。 java大神给出的解决方案 如果您需要覆盖属性,则可以执行以下操作:<context…
在Map中,如果我们使用现有键进行修改,则不会获得ConcurrentModificationException - java我有以下代码,我希望从情况2的情况下抛出ConcurrentModificationException,但它运行成功。据我所知,如果我对地图中的单个键执行相同的操作,则不会抛出异常,因为here但是当我重现这种具有两个案例的多个密钥的场景时,通过新密钥修改。通过现有密钥进行修改。情况1: Map<String,String> mp = new H…