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,我对使用-时决定在正则表达式中包含哪些字符的算法很好奇 Example: [a-zA-Z0-9] 它匹配任何大小写的任何字符,a到z,以及数字0到9 我最初认为它们的使用有点像宏,例如,a-z转换为a、b、c、d、e等等。。但当我在一家报纸上看到以下内容后 我对正则表达式的看法完全改变了,因为这些字符不是你的典型字符,所以我想,这到底是如何正确工作的 我的理论是-字面意思是 左字符和右字符之间的任意ASCII值。(例如a-z[97-122]) 有人能证实我的理论是否正确吗?正则表达式模式实际上

我对使用
-
时决定在正则表达式中包含哪些字符的算法很好奇

Example: [a-zA-Z0-9]
它匹配任何大小写的任何字符,a到z,以及数字0到9

我最初认为它们的使用有点像宏,例如,
a-z
转换为
a、b、c、d、e
等等。。但当我在一家报纸上看到以下内容后

我对正则表达式的看法完全改变了,因为这些字符不是你的典型字符,所以我想,这到底是如何正确工作的

我的理论是
-
字面意思是

左字符和右字符之间的任意ASCII值。(例如a-z[97-122])

有人能证实我的理论是否正确吗?正则表达式模式实际上是否使用字符代码计算任意字符之间的值

此外,如果它是正确的,您是否可以执行一个正则表达式匹配,如

A-z

因为
A
65
,而
z
122
,所以理论上,它也应该匹配这些值之间的所有字符。

您的两个假设都是正确的。(因此,从技术上讲,您可以执行
[#-~]
,它仍然有效,可以捕获大写字母、小写字母、数字和某些符号。)

您也可以使用Unicode来实现这一点,如
[\u0000-\u1000]

但是,您不应该执行
[A-z]
,因为在大写字母和小写字母之间有一些字符(特别是
[,\,],^,`
)。

From(粗体是我的):

指定字符范围的语法如下所示:

其中,
firstCharacter
是范围开始的字符,
lastCharacter
是范围结束的字符。字符范围是通过指定序列中的第一个字符、连字符(
-
)和序列中的最后一个字符来定义的连续字符序列如果两个字符具有相邻的Unicode代码点,则它们是连续的。


因此,您的假设是正确的,但事实上,效果更广泛:Unicode字符代码,而不仅仅是ASCII。

试试看:确实如此,这就是人们使用
A-Za-z
而不是
A-z
(这样他们就不会在
Z-a
之间找到东西,你为什么不试试呢?我相信你已经意识到了这一点,但是对于阅读这个问题的任何人来说,你都可以使用不区分大小写的标志来匹配这两组字符(例如
/[a-Za-Z]/
可以写成
/[a-Z]/我
@ctn-我相信OP正在寻找一些文档等,以绝对确认这是定义的行为,而不是特定引擎中的某些侥幸。是的-我看到了。
],[
答案中不需要另外两个ASCII表,你可以给一个链接。谢谢门把手,我很感激这个答案!这说明了一些问题。
如果两个字符有相邻的Unicode码点,那么它们是连续的。
-这正是我想听到的。谢谢!
A-z
[firstCharacter-lastCharacter]