Extracting Substrings

Extracting Substrings

Problem

You want to extract part of a string, starting at a particular place in the string. For example, you want the first eight characters of a username entered into a form.

Solution

Use substr( ) to select your substring, as in Figure.

Extracting a substring with substr( )

 ``````

Discussion

If \$start and \$length are positive, substr( ) returns \$length characters in the string, starting at \$start. The first character in the string is at position 0. Figure has positive \$start and \$length.

Using substr( ) with positive \$start and \$length

 `print substr('watch out for that tree',6,5);`

Figure prints:

`out f`

If you leave out \$length, substr( ) returns the string from \$start to the end of the original string, as shown in Figure.

Using substr( ) with positive start and no length

 `print substr('watch out for that tree',17);`

Figure prints:

`t tree`

If \$start is bigger than the length of the string, substr( ) returns false..

If \$start plus \$length goes past the end of the string, substr( ) returns all of the string from \$start forward, as shown in Figure.

Using substr( ) with length past the end of the string

 ```print substr('watch out for that tree',20,5); ```

Figure prints:

`ree`

If \$start is negative, substr( ) counts back from the end of the string to determine where your substring starts, as shown in Figure.

Using substr( ) with negative start

 ```print substr('watch out for that tree',-6); print substr('watch out for that tree',-17,5); ```

Figure prints:

```t tree
out f```

With a negative \$start value that goes past the beginning of the string (for example, if \$start is -27 with a 20-character string), substr( ) behaves as if \$start is 0.

If \$length is negative, substr( ) counts back from the end of the string to determine where your substring ends, as shown in Figure.

Using substr( ) with negative length

 ```print substr('watch out for that tree',15,-2); print substr('watch out for that tree',-4,-1); ```

Figure prints:

```hat tr
tre```