Wen
Wen

Reputation: 519

Matching html input values with regex

I am trying to match a string like the following:

<input type="text" value="cbyEOS56RK3lOxtiCrhmWSkDuNWwrFN4" name="iden">

This is my code:

$pattern = '~value="(.+?)" name="iden"~';
preg_match($pattern, $page, $match);
print_r($match);

As you can probably see, I am trying to match the value in this HTML input. By what I know of regular expressions, .* will match as many characters as possible until it satisfies the next token (in this case ").

I have the name="iden" part in my regex because there are other HTML inputs on the page and I only want to match this one.

Problem is, I'm not getting any matches at all. $match is an empty array. And I know that $page has the right content because I can see it when I echo it.

Help fixing my regex is appreciated, thanks.

Upvotes: 0

Views: 2661

Answers (1)

eldarerathis
eldarerathis

Reputation: 36213

Since you used the phrase "there are other inputs on the page", I assume you're trying to parse out this particular tag from a full HTML document. In that case, I recommend using a DOM parser rather than regular expressions (I'm not trying to be facetious with that link, there's just a lot of options so that seemed easiest). They are designed specifically for this purpose and will be a lot easier in the end.

If you want to try regex anyway, I would personally use ([^"]+) instead of (.+?):

$pattern = '~value="([^"]+)" name="iden"~';

Though this still doesn't address whatever is causing your problem, as your regex should match on that line.

Upvotes: 1

Related Questions