I'm looking for the best reliable way to **return the first and last name of a person given the full name**, so far the best I could think of is the following regular expression:

```
$name = preg_replace('~\b(\p{L}+)\b.+\b(\p{L}+)\b~i', '$1 $2', $name);

```

The expected output should be something like this:

```
William -> William // Regex Fails
William Henry -> William Henry
William Henry Gates -> William Gates

```

I also want it to **support accents**, for instance "João".

**EDIT: I understand that *some* names will not be properly identified, but this isn't a problem for me, since this is going to be used on a local site where the last word is the last name (might not be the whole surname though) but this isn't a problem since all I want is a quick way to say "Dear FIRST\_NAME LAST\_NAME"...** So all this discussion, while totally valid, is useless to me.

Can someone help me with this?