正则表达式不会提取所有匹配的单词

时间:2019-05-12 21:30:16

标签: regex

我正在尝试从特殊字符集中提取至少包含一个字符的单词。它只会听到一些单词,而不是其他单词。 Here is a link到regex101进行测试。这就是正则表达式\b(\w*[āīūẓḍḥṣṭĀĪŪẒḌḤṢṬʿʾ]+\w*)\b,这是我正在使用的示例句子

  

他的全名是AbuʿĪsaMuḥammadibnʿĪsa ibn Sawrah ibnMūsaibn   Al-DaḥākAl-SulamīAl-Tirmidhī。

它应与以下单词匹配:

  

穆萨玛德·萨穆阿·达沙克·苏拉米·蒂尔米迪·

我对正则表达式不太了解,所以我不知道我在做什么错。如果有人知道有什么工具可以找出为什么某个特定单词与正则表达式模式不匹配的原因,请也告诉我。

3 个答案:

答案 0 :(得分:2)

您可以使用

[\w-]*[āīūẓḍḥṣṭĀĪŪẒḌḤṢṬʿʾ][\wāīūẓḍḥṣṭĀĪŪẒḌḤṢṬʿʾ-]*

匹配一个必需的特殊字符后,使用另一种字符集来匹配更多出现的这些字符普通单词字符。

https://regex101.com/r/ovJoLt/2

答案 1 :(得分:1)

您可以通过启用Unicode标志/u(使单词边界\b断言支持Unicode字符)并将连字符添加到周围的字符组中来使其工作:

/\b[\w-]*[āīūẓḍḥṣṭĀĪŪẒḌḤṢṬʿʾ]+[\w-]*\b/gu

此外,您不需要捕获组,因为无论如何,只有匹配的字符才能形成所需的输出(\b是零宽度的断言)。

Demo

答案 2 :(得分:0)

您没有做任何错,只是要匹配unicode边界,您必须启用u修饰符或使用(?<!\S)\w*[āīūẓḍḥṣṭĀĪŪẒḌḤṢṬʿʾ]+\w*(?!\S)

如果要匹配连字符,请将其添加到字符类(?<!\S)\w*[āīūẓḍḥṣṭĀĪŪẒḌḤṢṬʿʾ-]+\w*(?!\S)