Is it possible to get 开发者_StackOverflow社区all regular expression matches in PHP? I need a script that will, for example, match .+
in abc
and give the result:
Array(a
, b
, c
, ab
, bc
, abc
)
I'm not sure there is a defined set of "all matches" in a regular expression.
For example, what if your pattern were .+.+
? What is matched by the first .+
? What is matched by the second?
A string may match a particular RE binding in multiple different ways, and which substring is captured by different parts of the RE may depend on things like greedy vs. non-greedy matching. But there is no defined way to iterate over all the different possible captures. You'd have to dramatically change the way that REs are processed to do this.
The issue is at the overlap, you want to match 'ab' and also 'bc' which you won't be able to do with a simple regex. However consider the following.
You can split out every character with either of these lines:
preg_match_all('/./', 'abc', $matches);
str_split('abc');
Giving you: array('a', 'b', 'c').
And the following will split pairs of characters with the remaining single character:
preg_match_all('/.{2}|./', 'abc', $matches);
Giving you: array('ab', 'c');
So you could play around with combinations/variations of these to achieve your outcome.
I know the question is a bit old, but there still might be someone who needs the answer.
Look at the flags
parameter for preg_match_all function
精彩评论