In php, it's fairly simple to find and capture all substrings that match a given regex, but is there a simple way to find the index of the first regex match in a string?
i.e. I'd like something that operates like this:
$str = "123456789abcdefgh";
$index = preg_index("#abcd#", $str);
// $index == 9
The INDEX MATCH[1] Formula is the combination of two functions in Excel: INDEX[2] and MATCH[3]. =INDEX() returns the value of a cell in a table based on the column and row number. =MATCH() returns the position of a cell in a row or column.
To match a character having special meaning in regex, you need to use a escape sequence prefix with a backslash ( \ ). E.g., \. matches "." ; regex \+ matches "+" ; and regex \( matches "(" . You also need to use regex \\ to match "\" (back-slash).
Use the PREG_OFFSET_CAPTURE
flag with preg_match
:
$str = "123456789abcdefgh";
$index = -1;
if(preg_match("#abcd#", $str, $matches, PREG_OFFSET_CAPTURE)) {
$index = $matches[0][1];
}
The [0]
above corresponds to the capture group inside the regex whose index you want (0
for the whole expression, 1
for the first capturing group if it exists, etc) while the [1]
is a fixed index, as documented.
Edit: Added an if
to make the code more presentable, it now doesn't take for granted that the pattern will definitely match.
See it in action.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With