欢迎光临
我们一直在努力

程序员将C#正则表达式转换为Java正则表达式 – c#

程序员面试经验

任何简单的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[wp{M}u200Bu200Cu00ACu001Fu200Du200Eu200F]+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 "bw+b": Bonjour true With pattern "bp{L}+b": Bonjour true With pattern "bw+b": یسیتنانت true With pattern "bp{L}+b": یسیتنانت true With pattern "bw+b": 世界人权宣言  true With pattern "bp{L}+b": 世界人权宣言  true 

当回复有时是一个对象有时是一个数组时,如何在使用改造时解析JSON回复? – java

我正在使用Retrofit来获取JSON答复。这是我实施的一部分[email protected]("/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异常 – java

java.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…

赞(0)
未经允许不得转载: 京大飞辅助网程序员面试-区块链javago面经 » 程序员将C#正则表达式转换为Java正则表达式 – c#

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址