# How to match last word?

**URL:** <https://www.ruby-forum.com/t/how-to-match-last-word/74939>\
**Category:** Ruby\
**Created:** [November 7, 2006, 11:03am UTC](https://www.ruby-forum.com/t/how-to-match-last-word/74939 "2006-11-07T11:03:30Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![camenix](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/a5b964/32.png) [@camenix](https://www.ruby-forum.com/u/camenix)\
**Post date:** [November 7, 2006, 11:03am UTC](https://www.ruby-forum.com/t/how-to-match-last-word/74939/1 "2006-11-07T11:03:30Z")

</div>

Hi,all  
I has a script to match ‘Transfer dbf to SQLServer’, the last  
comand successfully ended.But I found no way to match last  
command.Whoever can help me?

main.rb  
string=’  
Program begin at 2006-11-05T15:01:13+0800  
Change image name to lower begin at 2006-11-05T15:01:13+0800  
Change image name to lower end at 2006-11-05T15:01:14+0800  
Transfer dbf to SQLServer begin at 2006-11-05T15:01:14+0800  
Transfer dbf to SQLServer end at 2006-11-05T15:01:15+0800  
Modify Tables begin at 2006-11-05T15:01:15+0800  
’  
re=/\n{0,1}(.+?)\s+(end\s+at)(.+?)\n/i  
re.match(string)  
puts $1,$2,$3,$4

The string is came from a file,so the “\n” maybe ommited,but  
/\n{0,1}(.+?)\s+(end\s+at)(.+?)(\n|\Z)/i didn’t work.  
This form of regular expresion always match ‘Change image name to  
lower’.($2)

---

<div class="post-metadata">

**Author:** ![camenix](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/a5b964/32.png) [@camenix](https://www.ruby-forum.com/u/camenix)\
**Post date:** [November 7, 2006, 11:03am UTC](https://www.ruby-forum.com/t/how-to-match-last-word/74939/2 "2006-11-07T11:03:36Z")

</div>

camenix [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Transfer dbf to SQLServer begin at 2006-11-05T15:01:14+0800  
> lower’.($2)
> 
> > string=’  
> > Program begin at 2006-11-05T15:01:13+0800  
> > Change image name to lower begin at 2006-11-05T15:01:13+0800  
> > Change image name to lower end at 2006-11-05T15:01:14+0800  
> > Transfer dbf to SQLServer begin at 2006-11-05T15:01:14+0800  
> > Transfer dbf to SQLServer end at 2006-11-05T15:01:15+0800  
> > Modify Tables begin at 2006-11-05T15:01:15+0800  
> > ’  
> > puts string.scan(%r{^(._)\s+(?:begin|end) at ._$})  
> > Program  
> > Change image name to lower  
> > Change image name to lower  
> > Transfer dbf to SQLServer  
> > Transfer dbf to SQLServer  
> > Modify Tables  
> > =\> nil

Not the most efficient RX but seems to work - at least according to what  
I  
gather from your posting.

Kind regards

```
robert

```

---

<div class="post-metadata">

**Author:** ![camenix](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/a5b964/32.png) [@camenix](https://www.ruby-forum.com/u/camenix)\
**Post date:** [November 7, 2006, 11:03am UTC](https://www.ruby-forum.com/t/how-to-match-last-word/74939/3 "2006-11-07T11:03:44Z")

</div>

On Nov 5, 8:52 pm, “Robert K.” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> > Change image name to lower end at 2006-11-05T15:01:14+0800  
> > Transfer dbf to SQLServer begin at 2006-11-05T15:01:14+0800  
> > ap\> \> Transfer dbf to SQLServer end at 2006-11-05T15:01:15+0800
> > 
> > > string='Program begin at 2006-11-05T15:01:13+0800  
> > > Modify Tables  
> > > =\> nil
> 
> Not the most efficient RX but seems to work - at least according to what I  
> gather from your posting.
> 
> Kind regards
> 
> ```
> robert
> 
> ```

It worked!  
re=/^(.+?)\s+(end\s+at)(.+?)$/i  
puts s.match(re)  
result:Change image name to lower end at 2006-11-05T15:01:14+0800  
$2==Change image name to lower  
puts s.scan(re)  
result:  
Change image name to lower  
end at  
2006-11-05T15:01:14+0800  
Transfer dbf to SQLServer  
end at  
2006-11-05T15:01:15+0800  
$2==Transfer dbf to SQLServer

appreciate your help.
