Обсуждение: question about reg. expression
hi all, these return t: select 'ab' ~ '[a-z]$' select 'ab' ~ '^[a-z]' select 'ab' ~ '^[a-z]$' returns f Can't I use ^ and $ at the same time to match, in this case? thanks.
I'd think you need to indicate multiple alphabetic matches. Your first regex actually matches only b followed by end of string and the second is really only matching start of string followed by a. The third is looking for a single character string.
Try this: select 'ab' ~ '^[a-z]+$'
or this: select 'ab' ~ '^[a-z]*$'
or if looking only for 2 character strings: select 'ab' ~ '^[a-z][a-z]$'
On Tue, Jan 18, 2011 at 3:41 PM, andrew1 <andrew1@mytrashmail.com> wrote:
hi all,
these return t:
select 'ab' ~ '[a-z]$'
select 'ab' ~ '^[a-z]'
select 'ab' ~ '^[a-z]$' returns f
Can't I use ^ and $ at the same time to match, in this case?
thanks.
--
Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-sql
Another way to match multiple occurrences is to use curly brackets with a number, like:
select 'ab' ~ '^[a-z]{2}$';
It can be done with a range of numbers as well:
select 'ab' ~ '^[a-z]{2,4}$';
select 'abab' ~ '^[a-z]{2,4}$';
I believe, however, that the curly brackets notation was introduced in 9.0 and is not available in earlier versions.
--Stephen
On Wed, Jan 19, 2011 at 5:21 AM, Samuel Gendler <sgendler@ideasculptor.com> wrote:
I'd think you need to indicate multiple alphabetic matches. Your first regex actually matches only b followed by end of string and the second is really only matching start of string followed by a. The third is looking for a single character string.Try this: select 'ab' ~ '^[a-z]+$'or this: select 'ab' ~ '^[a-z]*$'or if looking only for 2 character strings: select 'ab' ~ '^[a-z][a-z]$'On Tue, Jan 18, 2011 at 3:41 PM, andrew1 <andrew1@mytrashmail.com> wrote:hi all,
these return t:
select 'ab' ~ '[a-z]$'
select 'ab' ~ '^[a-z]'
select 'ab' ~ '^[a-z]$' returns f
Can't I use ^ and $ at the same time to match, in this case?
thanks.
--
Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-sql
On Wed, Jan 19, 2011 at 08:17:50AM -0500, Stephen Belcher wrote: > Another way to match multiple occurrences is to use curly brackets with a > number, like: > select 'ab' ~ '^[a-z]{2}$'; > > It can be done with a range of numbers as well: > select 'ab' ~ '^[a-z]{2,4}$'; > select 'abab' ~ '^[a-z]{2,4}$'; > > I believe, however, that the curly brackets notation was introduced in 9.0 > and is not available in earlier versions. > > --Stephen > That is not so. POSIX regular expressions, including the curly backet notation, are available in all current supported releases of PostgreSQL: http://www.postgresql.org/docs/8.2/static/functions-matching.html#FUNCTIONS-POSIX-REGEXP I did not bother to check our local documentation for earlier releases as to how much earlier such support was available. Cheers, Ken
On 2011-01-18, andrew1 <andrew1@mytrashmail.com> wrote: > hi all, > > these return t: > select 'ab' ~ '[a-z]$' this matches the b and the end of the string > select 'ab' ~ '^[a-z]' this matches the start of the string and the a > select 'ab' ~ '^[a-z]$' returns f > Can't I use ^ and $ at the same time to match, in this case? > thanks. the above expression only succeeds if the string is one character long use '+' '*' or '{2}' etc after the '[a-z]' to allow it to match several letters or use '^[a-z]|[a-z]$' to match any sting that starts or ends with a letter. what are you trying to find? -- ⚂⚃ 100% natural