0

你能解释一下为什么我从这三个正则表达式中得到不同的结果吗?我期待所有三个中的第一个输出。

SQL> select regexp_substr(input,'.*') sub from test_regexp;
SUB
------------------------------------------------------------------------------
Understanding greediness, not the Enron kind

SQL> select regexp_substr(input,'[A-Za-z ]*') sub from test_regexp;
SUB
------------------------------------------------------------------------------
Understanding greediness

SQL> select regexp_substr(input,'[[:alpha:][:space:]]*') sub from test_regexp;
SUB
------------------------------------------------------------------------------
Understanding greediness

谢谢

4

1 回答 1

1

.*将匹配任何出现零到无限次的字符。

[A-Za-z ]*将匹配字符 AZ、az 和空格,但不匹配 ","。正则表达式将仅匹配逗号之前的部分,因为它将(贪婪地)匹配与正则表达式匹配的第一次出现。

[[:alpha:][:space:]]*将匹配字母字符(AZ & az)和空白字符。这意味着它将与上面的相同,但它也会匹配制表符和换行符等。

如果你想在你可以简单地添加,到字符类之后包含逗号和文本。

[A-Za-z, ]*
于 2013-07-21T13:50:31.043 回答