Question: I'm trying to extract a number from a string.

And do something like `[0-9]+` on the string `"aaa12xxx"` and get `"12"`.

I thought it would be something like:

```
> grep("[0-9]+", "aaa12xxx", value=TRUE)
[1] "aaa12xxx"

```

And then I figured... 

```
> sub("[0-9]+", "\\1", "aaa12xxx")
[1] "aaaxxx"

```

But I got some form of response doing:

```
> sub("[0-9]+", "ARGH!", "aaa12xxx")
[1] "aaaARGH!xxx"

```

There's a small detail I'm missing.

Answer: 
You can use PERL regexs' lazy matching:

```
> sub(".*?([0-9]+).*", "\\1", "aaa12xx99",perl=TRUE)
[1] "12"

```

Trying to substitute out non-digits will lead to an error in this case.
One way would be this: 

```
test <- regexpr("[0-9]+","aaa12456xxx")

```

Now, notice regexpr gives you the starting and ending indices of the string:

```
    > test
[1] 4
attr(,"match.length")
[1] 5

```

So you can use that info with substr function

```
substr("aaa12456xxx",test,test+attr(test,"match.length")-1)

```

I'm sure there is a more elegant way to do this, but this was the fastest way I could find. Alternatively, you can use sub/gsub to strip out what you don't want to leave what you do want.