Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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';s"\w";包括「_&引用;?是否有一个标志可以修复它?_Regex - Fatal编程技术网

为什么使用RegEx';s"\w";包括「_&引用;?是否有一个标志可以修复它?

为什么使用RegEx';s"\w";包括「_&引用;?是否有一个标志可以修复它?,regex,Regex,我认为\w应该只匹配字母(在许多不同的语言中)和数字。 我使用正则表达式在磁盘上搜索歌曲。 图案“song\W+艺术家”将与“song-artist”、“song”艺术家、“song(艺术家)”等匹配。 但它与“歌曲艺术家”不匹配,因为“歌曲艺术家”被认为是一个字母。 为什么? 顺便说一句,我可以使用“歌曲[^A-Za-z]+艺术家”模式,但这只适用于拉丁符号。没有标志,有很多方法可以修复它([^\W\u],[\W&[^\u]],[\W-[\u]],(?!\uw).用于变量名,而\w用于匹配变量

我认为\w应该只匹配字母(在许多不同的语言中)和数字。 我使用正则表达式在磁盘上搜索歌曲。 图案“song\W+艺术家”将与“song-artist”、“song”艺术家、“song(艺术家)”等匹配。 但它与“歌曲艺术家”不匹配,因为“歌曲艺术家”被认为是一个字母。 为什么?
顺便说一句,我可以使用“歌曲[^A-Za-z]+艺术家”模式,但这只适用于拉丁符号。

没有标志,有很多方法可以修复它(
[^\W\u]
[\W&[^\u]]
[\W-[\u]]
(?!\uw
)<代码>.用于变量名,而
\w
用于匹配变量中的所有字符。然后是ascii方式
[a-zA-Z0-9]
一种更快的方法。单词实际上只是一个不幸的短语。如果你真的有一个Unicode正则表达式引擎,那么单词中就包含了更多的符号,比如
。通过仅排除下划线,您不会排除其他字符。如果它是Unicode引擎,请使用类似于
\p{alnum}
的内容,其中属性匹配约133000个字符。这取决于您使用的引擎,但Perl和PCRE使用此正则表达式
[\p{alnum}](?在整个Unicode字符集中匹配,生成750个字符,例如标记和元音符号。