Bookmarks

Yahoo Gmail Google Facebook Delicious Twitter Reddit Stumpleupon Myspace Digg

Search queries

sqldatasource dal, wwwxxxenden, convert raid5 to raid 10 mdadm, apache force chunked, nrao wwwxxx, xxxxxdup, procmail change subject header, wwwXxx not20, Wwwxxx.doks sas, linux raid resync after reboot

Links

XODOX
Impressum

#1: How to put an AND in a regex?

Posted on 2011-10-13 12:33:17 by hamann

=0A=
Hi,=0A=
=0A=
I am trying to write a regex that should only match when certain patterns a=
re not present, e.g. when a line does not start with either a digit or ALL-=
CAPS text. I figured I could use negative look-aheads for this.=0A=
=0A=
I can write it as:=0A=
=0A=
if (/^(?![[:upper:]][[:upper:]])/) {=0A=
if (/^(?!\d)/) {=0A=
s/^/<test>/;=0A=
}=0A=
else {=0A=
}=0A=
}=0A=
else {=0A=
}=0A=
=0A=
However, I was wondering whether there was a way of writing this as a singl=
e if loop, because there are much more than two situations that should not =
be matched.=0A=
=0A=
I tried to write it as:=0A=
=0A=
if (/^(?![[:upper:]][[:upper:]])|^(?!\d)/) {=0A=
s/^/<test>/;=0A=
}=0A=
else {=0A=
}=0A=
=0A=
but this means if one option is not matched the other one is matched, which=
is not what I want. So I need something that does the equivalent of "Don't=
match this AND don't match this". Is this possible in a if loop, or should=
I use something else?=0A=
=0A=
Thanks,=0A=
=0A=
Regards,=0A=
Thomas Hamann=0A=

--
To unsubscribe, e-mail: beginners-unsubscribe@perl.org
For additional commands, e-mail: beginners-help@perl.org
http://learn.perl.org/

Report this message

#2: Re: How to put an AND in a regex?

Posted on 2011-10-13 14:10:45 by Igor Dovgiy

--0016e6de14d5cb807104af2d070f
Content-Type: text/plain; charset=ISO-8859-1

Hmm, probably you should. To use two of them in AND combination, just... use
two of them. )

/^(?![[:upper:]][[:upper:]])(?!\d)/

And it gets even better: you may mix any number of look-aheads in a single
regex this way. )

-- iD

2011/10/13 Hamann, T.D. (Thomas) <hamann@nhn.leidenuniv.nl>

>
> Hi,
>
> I am trying to write a regex that should only match when certain patterns
> are not present, e.g. when a line does not start with either a digit or
> ALL-CAPS text. I figured I could use negative look-aheads for this.
>
> I can write it as:
>
> if (/^(?![[:upper:]][[:upper:]])/) {
> if (/^(?!\d)/) {
> s/^/<test>/;
> }
> else {
> }
> }
> else {
> }
>
> However, I was wondering whether there was a way of writing this as a
> single if loop, because there are much more than two situations that should
> not be matched.
>
> I tried to write it as:
>
> if (/^(?![[:upper:]][[:upper:]])|^(?!\d)/) {
> s/^/<test>/;
> }
> else {
> }
>
> but this means if one option is not matched the other one is matched, which
> is not what I want. So I need something that does the equivalent of "Don't
> match this AND don't match this". Is this possible in a if loop, or should I
> use something else?
>
> Thanks,
>
> Regards,
> Thomas Hamann
>
> --
> To unsubscribe, e-mail: beginners-unsubscribe@perl.org
> For additional commands, e-mail: beginners-help@perl.org
> http://learn.perl.org/
>
>
>

--0016e6de14d5cb807104af2d070f--

Report this message

#3: RE: How to put an AND in a regex?

Posted on 2011-10-13 14:31:25 by hamann

Thanks!=0A=
=0A=
That was really simple (so simple I did not think about it ;)=0A=
=0A=
Thomas=0A=
=0A=
________________________________________=0A=
Van: Igor Dovgiy [ivd.privat@gmail.com]=0A=
Verzonden: donderdag 13 oktober 2011 14:10=0A=
Aan: beginners@perl.org=0A=
Onderwerp: Re: How to put an AND in a regex?=0A=
=0A=
Hmm, probably you should. To use two of them in AND combination, just... us=
e=0A=
two of them. )=0A=
=0A=
/^(?![[:upper:]][[:upper:]])(?!\d)/=0A=
=0A=
And it gets even better: you may mix any number of look-aheads in a single=
=0A=
regex this way. )=0A=
=0A=
-- iD=0A=
=0A=
2011/10/13 Hamann, T.D. (Thomas) <hamann@nhn.leidenuniv.nl>=0A=
=0A=
>=0A=
> Hi,=0A=
>=0A=
> I am trying to write a regex that should only match when certain patterns=
=0A=
> are not present, e.g. when a line does not start with either a digit or=
=0A=
> ALL-CAPS text. I figured I could use negative look-aheads for this.=0A=
>=0A=
> I can write it as:=0A=
>=0A=
> if (/^(?![[:upper:]][[:upper:]])/) {=0A=
> if (/^(?!\d)/) {=0A=
> s/^/<test>/;=0A=
> }=0A=
> else {=0A=
> }=0A=
> }=0A=
> else {=0A=
> }=0A=
>=0A=
> However, I was wondering whether there was a way of writing this as a=0A=
> single if loop, because there are much more than two situations that shou=
ld=0A=
> not be matched.=0A=
>=0A=
> I tried to write it as:=0A=
>=0A=
> if (/^(?![[:upper:]][[:upper:]])|^(?!\d)/) {=0A=
> s/^/<test>/;=0A=
> }=0A=
> else {=0A=
> }=0A=
>=0A=
> but this means if one option is not matched the other one is matched, whi=
ch=0A=
> is not what I want. So I need something that does the equivalent of "Don'=
t=0A=
> match this AND don't match this". Is this possible in a if loop, or shoul=
d I=0A=
> use something else?=0A=
>=0A=
> Thanks,=0A=
>=0A=
> Regards,=0A=
> Thomas Hamann=0A=
>=0A=
> --=0A=
> To unsubscribe, e-mail: beginners-unsubscribe@perl.org=0A=
> For additional commands, e-mail: beginners-help@perl.org=0A=
> http://learn.perl.org/=0A=
>=0A=
>=0A=
>=0A=

--
To unsubscribe, e-mail: beginners-unsubscribe@perl.org
For additional commands, e-mail: beginners-help@perl.org
http://learn.perl.org/

Report this message

#4: Re: How to put an AND in a regex?

Posted on 2011-10-13 16:14:13 by Peter Scott

On Thu, 13 Oct 2011 10:33:17 +0000, Hamann, T.D. (Thomas) wrote:
> I am trying to write a regex that should only match when certain
> patterns are not present, e.g. when a line does not start with either a
> digit or ALL-CAPS text. I figured I could use negative look-aheads for
> this.
>=20
> I can write it as:
>=20
> if (/^(?![[:upper:]][[:upper:]])/) {
> if (/^(?!\d)/) {
> s/^/<test>/;
> }
> else {
> }
> }
> else {
> }
>=20
> However, I was wondering whether there was a way of writing this as a
> single if loop, because there are much more than two situations that
> should not be matched.
>=20
> I tried to write it as:
>=20
> if (/^(?![[:upper:]][[:upper:]])|^(?!\d)/) { s/^/<test>/;
> }
> else {
> }
>=20
> but this means if one option is not matched the other one is matched,
> which is not what I want. So I need something that does the equivalent
> of "Don't match this AND don't match this". Is this possible in a if
> loop, or should I use something else?

Am I missing something about why this approach won't work for you:

if ( ! /\A[[:upper:]][[:upper:]]/ && ! /\A[[:digit:]]/ )=20

Seems easier to understand.

--=20
Peter Scott
http://www.perlmedic.com/ http://www.perldebugged.com/
http://www.informit.com/store/product.aspx?isbn=3D0137001274
http://www.oreillyschool.com/certificates/perl-programming.p hp

--=20
To unsubscribe, e-mail: beginners-unsubscribe@perl.org
For additional commands, e-mail: beginners-help@perl.org
http://learn.perl.org/

Report this message

#5: Re: How to put an AND in a regex?

Posted on 2011-10-13 18:36:10 by John Delacour

At 10:33 +0000 13/10/11, Hamann, T.D. (Thomas) wrote:

>...So I need something that does the equivalent of "Don't match this
>AND don't match this". Is this possible in a if loop, or should I
>use something else?

for (qw (bcd 1num ASDSF two)){
print "$_\n" if !/^[0-9]/ and !/^[A-Z]+/;
}

JD


--
To unsubscribe, e-mail: beginners-unsubscribe@perl.org
For additional commands, e-mail: beginners-help@perl.org
http://learn.perl.org/

Report this message

#6: Re: How to put an AND in a regex?

Posted on 2011-10-14 05:29:25 by Rob Dixon

On 13/10/2011 11:33, Hamann, T.D. (Thomas) wrote:
>
> Hi,
>
> I am trying to write a regex that should only match when certain
> patterns are not present, e.g. when a line does not start with either
> a digit or ALL-CAPS text. I figured I could use negative look-aheads
> forthis.
>
> I can write it as:
>
> if (/^(?![[:upper:]][[:upper:]])/) {
> if (/^(?!\d)/) {
> s/^/<test>/;
> }
> else {
> }
> }
> else {
> }
>
> However, I was wondering whether there was a way of writing this as
> a single if loop, because there are much more than two situations
> that should not be matched.
>
> I tried to write it as:
>
> if (/^(?![[:upper:]][[:upper:]])|^(?!\d)/) {
> s/^/<test>/;
> }
> else {
> }
>
> but this means if one option is not matched the other one is
> matched, which is not what I want. So I need something that does the
> equivalent of "Don't match this AND don't match this". Is this
> possible in a if loop, or should I use something else?

How about

unless (/^[[:upper]]{2}/ or /^\d/) {
s/^/<test>/;
}

Which seems to me to be much clearer in purpose than anything else that
has been posted.

HTH,

Rob

--
To unsubscribe, e-mail: beginners-unsubscribe@perl.org
For additional commands, e-mail: beginners-help@perl.org
http://learn.perl.org/

Report this message

#7: Re: How to put an AND in a regex?

Posted on 2011-10-14 08:51:51 by derykus

On Oct 13, 3:33=A0am, ham...@nhn.leidenuniv.nl ("Hamann, T.D. (Thomas)")
wrote:

>
> I am trying to write a regex that should only match when certain patterns=
are not present, e.g. when a line does not start with either a digit or AL=
L-CAPS text. I figured I could use negative look-aheads for this.
>
> I can write it as:
>
> if (/^(?![[:upper:]][[:upper:]])/) {
> =A0 =A0 if (/^(?!\d)/) {
> =A0 =A0 s/^/<test>/;
> =A0 =A0 }
> =A0 =A0 else {
> =A0 =A0 }
>
> }
> else {
> }
>
> However, I was wondering whether there was a way of writing this as a sin=
gle if loop, because there are much more than two situations that should no=
t be matched.
>
> I tried to write it as:
>
> if (/^(?![[:upper:]][[:upper:]])|^(?!\d)/) {
> s/^/<test>/;
>
> }
> else {
> }
>
> but this means if one option is not matched the other one is matched, whi=
ch is not what I want. So I need something that does the equivalent of "Don=
't match this AND don't match this". Is this possible in a if loop, or shou=
ld I use something else?

Yet another way:

unless ( /^ (?: [[:upper:]]{2} | \d ) /x ) {
...
}

--
Charles DeRykus


--
To unsubscribe, e-mail: beginners-unsubscribe@perl.org
For additional commands, e-mail: beginners-help@perl.org
http://learn.perl.org/

Report this message