kevin
kevin

Reputation: 67

PHP Extract Specific Character from string

i have the bellow string

$LINE = TCNU1573105  HDPE HTA108  155   155  000893520918 PAL990  25.2750 MT  28.9750 MT

and i want extract the PAL990 from the above string. actually extract PAL990 string or any string that has PAL followed by some digits Like PAL222 or PAL123

i tried many ways and could not get the result. i used,

substr ( $LINE, 77, 3) 

but when the value in different position i get the wrong value.

Upvotes: 0

Views: 1117

Answers (2)

Sreejith N
Sreejith N

Reputation: 41

$string = "123ABC1234 *$%^&abc.";
$newstr = preg_replace('/[^a-zA-Z\']/','',$string);
echo $newstr;

Output:ABCabc

Upvotes: 0

Wiktor Stribiżew
Wiktor Stribiżew

Reputation: 626794

You may use

$LINE = "TCNU1573105  HDPE HTA108  155   155  000893520918 PAL990  25.2750 MT  28.9750 MT";
if (preg_match('~\bPAL\d+\b~', $LINE, $res)) {
    echo $res[0]; // => PAL990
}

See the PHP demo and this regex demo.

Details

  • \b - a word boundary
  • PAL - a PAL substring
  • \d+ - 1+ digits
  • \b - a word boundary.

The preg_match function will return the first match.

Note that in case your string contains similar strings in between hyphens/whitespace you will no longer be able to rely on word boundaries, use custom whitespace boundaries then, i.e.:

'~(?<!\S)PAL\d+(?!\S)~'

See this regex demo

EDIT

If you may have an optional whitespace between PAL and digits, you may use

preg_replace('~.*\b(PAL)\s?(\d+)\b.*~s', '$1$2', $LINE)

See this PHP demo and this regex demo.

Or, match the string you need with spaces, and then remove them:

if (preg_match('~\bPAL ?\d+\b~', $LINE, $res)) {
    echo str_replace(" ", "", $res[0]);
}

See yet another PHP demo

Note that ? makes the preceding pattern optional (1 or 0 occurrences are matched).

Upvotes: 1

Related Questions