From: Robert Klemme Date: 2009-09-10T18:17:17+09:00 Subject: Re: regex: multiline --0016364d205b3f39d2047335a91b Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable 2009/9/10 7stud -- : > Ahmet Kilic wrote: >> Hello, >> >> I am trying regex samples on this page >> http://gnosis.cx/publish/programming/regular_expressions.html. >> My problem is, how can I grep multiline with regex? >> >> This is my example; >> ... >> =A0*********************************************************************= ********) >> function TfrmExecMain.SetPrivilege(PrivilegeName: String; >> =A0 Enable: Boolean): Boolean; >> var >> =A0 tpPrev, >> =A0 tp =A0 =A0 =A0 =A0 : TTokenPrivileges; >> =A0 token =A0 =A0 =A0: THandle; >> =A0 dwRetLen =A0 : DWord; >> begin >> ... >> I want to print some parts of this. >> >> for example; >> =A0if function=3D~/\b(^function)\s+(\w+)/ >> print this part=3D=3D=3D> : Boolean; >> =A0end >> if line.match(/var/) and line.match(/begin/) >> =A0print this part =3D=3D> : TTokenPrivileges; >> =A0print this part =3D=3D> : THandle; >> =A0and print this =A0=3D=3D> : DWord; >> end >> >> How can i do it? > > > str =3D < function TfrmExecMain.SetPrivilege(PrivilegeName: String; > Enable: Boolean): Boolean; > var > =A0tpPrev, > =A0tp =A0 =A0 =A0 =A0 : TTokenPrivileges; > =A0token =A0 =A0 =A0: THandle; > =A0dwRetLen =A0 : DWord; > begin > ENDOFSTRING > > md =3D str.match(/function.*?\):\s+(.*?;)/m) > if md > =A0puts md[1] > end > > --output:-- > Boolean; Note that you do not need the /m flag for this to match. This works the same without it. The only difference that /m makes is whether newlines are matched by .: irb(main):001:0> s =3D "a\nb\n" =3D> "a\nb\n" irb(main):002:0> s[/.*/] =3D> "a" irb(main):003:0> s[/.*/m] =3D> "a\nb\n" It does not make any difference for \s: irb(main):004:0> s[/\s+/] =3D> "\n" irb(main):005:0> s[/\s+/m] =3D> "\n" I'll attach an extended example. Kind regards robert --=20 remember.guy do |as, often| as.you_can - without end http://blog.rubybestpractices.com/ --0016364d205b3f39d2047335a91b Content-Type: application/x-ruby; name="ml.rb" Content-Disposition: attachment; filename="ml.rb" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fzfacbtq0 IyFydWJ5MTkKCnN0ciA9IDw8RU5ET0ZTVFJJTkcKZnVuY3Rpb24gVGZybUV4ZWNNYWluLlNldFBy aXZpbGVnZShQcml2aWxlZ2VOYW1lOiBTdHJpbmc7CkVuYWJsZTogQm9vbGVhbik6IEJvb2xlYW47 CnZhcgogdHBQcmV2LAogdHAgICAgICAgICA6IFRUb2tlblByaXZpbGVnZXM7CiB0b2tlbiAgICAg IDogVEhhbmRsZTsKIGR3UmV0TGVuICAgOiBEV29yZDsKYmVnaW4KRU5ET0ZTVFJJTkcKCnAgc3Ry CgppZiAlcnsKICBeZnVuY3Rpb24KICBccysKICAoW15ccyhdKykKICBccyoKICBcKAogIChbXild KykKICBcKQogIFxzKgogIDoKICBccyoKICAoXFMrKQogIFxzKgogIDsKICBccyoKICBeXHMqdmFy XHMqJAogICguKj8pCiAgXmJlZ2luCn14bSA9fiBzdHIgdGhlbgogIGFyZ3MgPSAkMgogIHZhcnMg PSAkNAogIHsKICAgICJmdW5jdGlvbiIgPT4gJDEsCiAgICAiYXJncyIgPT4gYXJncywKICAgICJy ZXR1cm4iID0+ICQzLAogICAgInZhcnMiID0+IHZhcnMsCiAgfS5lYWNoIGRvIHxsYWJlbCwgdmFs fAogICAgcHJpbnRmICIlLTMwcyAlcFxuIiwgbGFiZWwsIHZhbAogIGVuZAoKICBhcmdzLnNwbGl0 KC87LykuZWFjaCBkbyB8YXJnfAogICAgaWYgL1xBKFteOl0rKTooW146XSspXHovID1+IGFyZwog ICAgICBuYW1lID0gJDEuc3RyaXAKICAgICAgdHlwZSA9ICQyLnN0cmlwCiAgICAgIHByaW50ZiAi YXJnOiB0eXBlOiAlLTIwcyBuYW1lOiAlLTIwc1xuIiwgdHlwZSwgbmFtZQogICAgZWxzZQogICAg ICBwdXRzICJlcnJvciB3aXRoIGFyZyAje2FyZy5pbnNwZWN0fSIKICAgIGVuZAogIGVuZAoKICB2 YXJzLnNjYW4oL1teO10rOy8pIGRvIHx2YXJ8CiAgICBpZiAvXEEoW146XSspOihbXjpdKyk7XHov ID1+IHZhcgogICAgICBuYW1lcyA9ICQxCiAgICAgIHR5cGUgID0gJDIuc3RyaXAKCiAgICAgIG5h bWVzLnNwbGl0KC8sLykuZWFjaCBkbyB8bmFtZXwKICAgICAgICBwcmludGYgInZhcjogdHlwZTog JS0yMHMgbmFtZTogJS0yMHNcbiIsIHR5cGUsIG5hbWUuc3RyaXAKICAgICAgZW5kCiAgICBlbHNl CiAgICAgIHB1dHMgImVycm9yIHdpdGggdmFyICN7YXJnLmluc3BlY3R9IgogICAgZW5kCiAgZW5k CmVsc2UKICBwdXRzICJObyBNYXRjaCIKZW5kCg== --0016364d205b3f39d2047335a91b--