意思或管道然后插入Posix正则表达式

时间:2014-12-23 08:25:47

标签: regex postgresql posix

我已经看到并使用了许多插入符号的例子,因为它位于模式的开头,并且否定了方括号中的组等,但今天我发现在管道(OR)字符后使用了插入符号。这是一个例子:

([^0-9]*|^)5

所以我理解为:

Any non-numeric character zero or more times, OR ???-something-???,
then followed by the number five

所以我知道第一个插入符号是什么意思,但第二个插入符号让我有点兴奋。美元符号也以类似的方式使用,所以如果你能告诉我这个也意味着什么:

([^0-9]*|^)5[0-9]{9}([^0-9]*|$)

我将其翻译为:

Any non-numeric character zero or more times, OR ???-something-???
then followed by the number five
then nine numeric characters
then any non-numeric character zero or more times, OR ???-something-else-???

???-something-?????-something-else-??意味着什么?

编辑:这是在postgres案例陈述中的完整用法:

WHEN my_field ~ '([^[[:alnum:]]]*|^)5[[:alnum:]]{9}([^[[:alnum:]]]*|$)' 
THEN array_to_string(regexp_matches(my_field,'5[[:alnum:]]{9}'),'')

我用0-9简化了它......但不管怎样,整件事似乎都错了。它是从字段中提取合同号,但WHEN子句允许任何提供它的字符串后面跟着9个字母数字字符。 THEN部分简单地提取5及其前面的9个字符......

1 个答案:

答案 0 :(得分:0)

默认情况下,插入符号^匹配&#34;字符串&#34;的开头,而美元$匹配&#34;字符串的结尾&#34;。< / p>

但是,在nw modes中,^$的行为会更改为匹配&#34;行的开头& #34;和#34;一行的结尾&#34;分别根据the description at the end of this linked section

匹配&#34;字符串的开头有另一种语法&#34;和&#34;字符串的结尾&#34;无论模式如何,\A\Z