Re: [问题] 使用正则表示式?

楼主: TKB5566 (我们的元首阿道夫希特勒)   2023-05-08 21:28:18
藉这个标题回一下,关于regular expression,应该是先理解其本身的基本观念,
接着再延伸到各个程式语言对regular expression的应用与变形,例如Java、JavaScript
所以一开始对regular expression的理解会是这样:
[0123456789]
[9876543210]
[0-9]
\d
(1|2|3|4|5|6|7|8|9)
以上五种写法都是表达同一种意思,即任一个数字字符。
那么为何[0-9]可以,[9-0]就不可以呢?
因为若是采用[0-9]这种含有范围字符的写法,范围字符左右两边,对应的ascii code
必须是小跟大;0的ascii code是48,9的ascii code是57,所以必须写成[0-9]才行。
也就是说,大原则上regular expression底层是会被转换成ascii code来执行。
或是这样理解:
/d/D
/s/S
/w/W
.(加上空白字符)
以上四种写法也都是一样意思,表示任何一个字符;而
[0-9A-Za-z_]包含所有英数字符,也就是上面四种写法减去部分特殊字符。
以上都是表达单一字符,若要表达多个字符,比方说4个数字字符。写法可以是:
[0-9][0-9][0-9][0-9]
[0-9]{4}
\d\d\d\d
\d{4}
甚至是(1|2|3|4|5|6|7|8|9)重复写4次。
可以看到不同语法的组合,可以产生很多种写法。
而一个/一串字符,至少出现0次、至少出现1次、0或1次也都有对应的写法:*、+、?。
另外还有否定意思的写法:^;[^a]就是非a;[^ab]就是第一个字符非a,或是非b。
而[a^b]和[\^ab]都是一样的意思,都是a、^、b三个字符任一即可。
作者: ssccg (23)   2023-05-09 08:14:00
后那段“Java的写法”其实是Java literal string的写法在literal string里需要escape \,实际的string物件里就跟原本的regex是一样的,如果是用别的方式输入例如档案就不需要\\
作者: EijiHoba (我要好工作)   2023-08-10 08:50:00
谢谢分享

Links booklink

Contact Us: admin [ a t ] ucptt.com