Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式未提取所有匹配词_Regex - Fatal编程技术网

Regex 正则表达式未提取所有匹配词

Regex 正则表达式未提取所有匹配词,regex,Regex,我试图从一个特殊的字符集中提取至少有一个字符的单词。它拾取一些单词,而不是其他单词。到regex101进行测试。这是正则表达式\b(\w*[āīū)ẓḍḥṣṭĀĪŪẒḌḤṢṬ这是我正在使用的示例句子 他的全名是AbuʿĪsa Muḥ阿迈德·伊本·伊本·萨瓦拉·伊本·姆萨·伊本 阿尔达ḥāk Al-SulamīAl-Tirmidhī 它应与以下文字匹配: ʿĪsa Muḥ阿马德萨姆萨阿尔达酒店ḥāk Al-SulamīAl-Tirmidhī 我对正则表达式不是很有经验,所以我不知道我做错了什么。如

我试图从一个特殊的字符集中提取至少有一个字符的单词。它拾取一些单词,而不是其他单词。到regex101进行测试。这是正则表达式
\b(\w*[āīū)ẓḍḥṣṭĀĪŪẒḌḤṢṬ这是我正在使用的示例句子

他的全名是AbuʿĪsa Muḥ阿迈德·伊本·伊本·萨瓦拉·伊本·姆萨·伊本 阿尔达ḥāk Al-SulamīAl-Tirmidhī

它应与以下文字匹配:

ʿĪsa Muḥ阿马德萨姆萨阿尔达酒店ḥāk Al-SulamīAl-Tirmidhī

我对正则表达式不是很有经验,所以我不知道我做错了什么。如果有人知道任何工具来找出特定单词与正则表达式模式不匹配的原因,请也告诉我。

您可以使用

[\w-]*[āīūẓḍḥṣṭĀĪŪẒḌḤṢṬʿʾ][\wāīūẓḍḥṣṭĀĪŪẒḌḤṢṬʿʾ-]*
匹配一个所需的特殊字符后,使用另一个字符集来匹配这些字符或普通单词字符的更多匹配项


除了要匹配unicode边界必须启用
u
修饰符或使用
(?)之外,您没有做错任何事情


如果要匹配连字符,请将其添加到字符类
(?

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

/\b[\w-]*[āīūẓḍḥṣṭĀĪŪẒḌḤṢṬʿʾ]+[\w-]*\b/gu
另外,您不需要捕获组,因为仅匹配的字符构成所需的输出(
\b
是零宽度断言)


我刚刚意识到它被设置为PHP,如果我切换到JavaScript,它将不起作用。我能做些什么来在JavaScript中修复它?@user1807157我相信CertainPerformance的答案适用于JavaScript正则表达式引擎,并且比试图修复当前答案中的内容更容易阅读,所以我建议这样做。问题不是hat
\b
不支持带JS regex的Unicode。谢谢。我接受了他的,因为它更适合我的用例。