在正則表達式中[:digit:]是任意數字,在使用時是[[:digit:]] 多了[] ,爲什麽要把[:digit:]放在[]裏面呢?爲什麽[0-9]在使用時不用放在[]裏面,[:digit:]和[0-9]比起來,爲什麽要多加[]這兩個符號?
[:digit:]{4}和[[:digit:]]{4}有什麽區別,後面的多了[]。
'[:digit:]{4}'和'[[:digit:]]{4}'有沒有區別?
還有一個問題那麽^[^[":digit:"]]是表示首字符是非數字嗎?好像這並不是這個表達方式,而是^[^0-9]
MySQL必知必會一書說 類 [:digit:] 任意數字(同[0-9]) 那爲什麽[0-9]不用多一個方括號而[:digit:]要多一個方括號?
下面是運行結果:
SELECT 'hello2' REGEXP '[0-9]';
返回結果為1
SELECT 'hello2' REGEXP '[:digit:]';
返回結果為0
SELECT 'hello2' REGEXP '[[:digit:]]';
返回結果為1
請解釋原因
【以下回答由 GPT 生成】
[:digit:]
和[[:digit:]]
是正则表达式中的字符类别表达式,用于匹配数字字符。相比于[0-9]
,它们具有更广泛的应用范围和更简洁的语法。下面是对问题中的每个部分的解释:
[:digit:]
要放在方括号[]
中是因为它是字符类别表达式的一部分。字符类别表达式是用于匹配特定类别的字符的方式,而方括号[]
是用于界定一个字符类别的开始和结束的标志。[0-9]
不需要方括号是因为它是一个字符范围表达式,用于匹配0到9之间的数字字符。
[:digit:]
和[0-9]
的区别在于前者更加通用。[0-9]
只能匹配数字字符0到9,而[:digit:]
能够匹配任何Unicode数字字符,包括全角数字和其他语言中的数字字符。
[:digit:]{4}
表示匹配连续出现的四个数字字符,而[[:digit:]]{4}
表示匹配连续出现的四个字符,且这些字符是任何Unicode数字字符。
^[^[:digit:]]
的意思是匹配以非数字字符开头的字符串。^
表示匹配行的开始,[^[:digit:]]
表示匹配除了任何Unicode数字字符之外的字符。
现在来解释以上代码的结果:
SELECT 'hello2' REGEXP '[0-9]';
返回结果为1,因为'hello2'字符串中包含了数字字符2。SELECT 'hello2' REGEXP '[:digit:]';
返回结果为0,因为'hello2'字符串中并不包含字符类别表达式[:digit:]
匹配的任何字符。SELECT 'hello2' REGEXP '[[:digit:]]';
返回结果为1,因为'hello2'字符串中包含了字符类别表达式[[:digit:]]
匹配的数字字符2。\d才是任意数字。[\d]和\d其实是一回事,只是[\dA-Za-z]这种写法,比如说同时允许数字和字母,两种以上的,就需要方括号。
感觉 ada 回答挺正确的