当前位置: 首页 > 面试题库 >

在Java正则表达式中匹配Unicode哈希?

孟树
2023-03-14
问题内容

我正在尝试制作一个Java正则表达式,以使用Pattern.split()将常规格式“ foo-bar”的字符串拆分为“ foo”和“
bar”。“-”字符可以是几个破折号之一:ASCII’-‘,em-破折号,en-破折号等。我构造了以下正则表达式:

private static final Pattern titleSegmentSeparator = Pattern.compile("\\s(\\x45|\\u8211|\\u8212|\\u8213|\\u8214)\\s");

如果我正确阅读了Pattern文档,则当在两边都被空格包围时,应该捕获任何Unicode破折号或ASCII破折号。我使用的模式如下:

String[] sectionSegments = titleSegmentSeparator.split(sectionTitle);

不开心
对于下面的示例输入,未检测到破折号,并且titleSegmentSeparator.matcher(sectionTitle).find()返回false!

为了确保我不会丢失任何不寻常的字符实体,我使用System.out打印了一些调试信息。输出如下-
每个字符后跟(int)char的输出,这应该是其Unicode代码点,不是吗?

输入样例:

研究摘要(10之1)–竞争

S(83)t(116)u(117)d(100)y(121)(32)S(83)u(117)m(109)m(109)a(97)r(114)y(121
)(32)((40)1(49)(32)o(111)f(102)(32)1(49)0(48))(41)(32)–(8211)(32)C(
67)o(111)m(109)p(112)e(101)t(116)i(105)t(116)i(105)o(111)n(110)

在我看来,破折号是代码点8211,应该由正则表达式匹配,但事实并非如此!这里发生了什么?


问题答案:

您正在混合使用十进制(8211)和十六进制(0x8211)。

\x并且\u都期望使用十六进制数字,因此您需要使用\u2014匹配破折号,而不是\u8211(以及\x2D用于常规连字符等)。

但是,为什么不简单地使用Unicode属性“ Dash标点符号”呢?

作为Java字符串: "\\s\\p{Pd}\\s"



 类似资料:
  • 问题内容: 我已经阅读了Stackoverflow上的其他问题,但还没有结束。抱歉,如果已经可以回答,但是我没有任何建议在那里工作。 一切都很好,然后我尝试使用其中包含挪威字符的内容(或更像unicode的内容): 如何匹配øæå等典型的unicode字符?我希望能够同时在上述标记组和文件名标记组中匹配这些字符。 问题答案: 您需要指定标志, 并 使用前缀将您的字符串输入为Unicode字符串:

  • 问题内容: 当字符串以数字开头时,我需要匹配,然后是一个点,然后是一个空格和1个或多个大写字符。匹配必须发生在字符串的开头。我有以下字符串。 我尝试过的正则表达式是: 它不匹配。一个有效的正则表达式将对这个问题有什么作用? 问题答案: (对不起,我先前的错误。大脑现在坚定地投入了。嗯,也许。) 这有效: 分解: =字符串开头 =一个或多个数字 (之所以转义,是因为它在字符串中,因此) =文字(或者

  • 问题内容: 我从以下格式的文件中获取输入: 现在,我想在我的Java代码中读取int1,int2,int3和int4。我该如何在Java中使用正则表达式匹配。谢谢。 问题答案: 为了避免空值:

  • 我们得到了一些这样的内容:

  • 有没有人试图描述与正则表达式匹配的正则表达式? 由于重复的关键字,这个主题几乎不可能在网上找到。 它可能在实际应用程序中不可用,因为支持正则表达式的语言通常具有解析它们的方法,我们可以将其用于验证,以及一种在代码中分隔正则表达式的方法,可用于搜索目的。 但是我仍然想知道匹配所有正则表达式的正则表达式是什么样子的。应该可以写一个。