I want to break a string according to the following rules:
- all consecutive alpha-numeric chars, plus the dot (
.
) must be treated as one part - all other consecutive chars must be treated as one part
- consecutive combinations of
1
and2
must be treated as different parts - no whitespace must be returned
For example this st开发者_如何学Cring:
Method(hierarchy.of.properties) = ?
Should return this array:
Array
(
[0] => Method
[1] => (
[2] => hierarchy.of.properties
[3] => )
[4] => =
[5] => ?
)
I was unsuccessful with preg_split()
, as AFAIK it cannot treat the pattern as an element to be returned.
Any idea for a simple way to do this?
You probably should use preg_match_all over preg_split.
preg_match_all('/[\w|\.]+|[^\w\s]+/', $string, $matches);
print_r($matches);
Output:
Array
(
[0] => Array
(
[0] => Method
[1] => (
[2] => hierarchy.of.properties
[3] => )
[4] => =
[5] => ?
)
)
This should do what you want:
$matches = array();
$string = "Method(hierarchy.of.properties) = ?";
foreach(preg_split('/(12|[^a-zA-Z0-9.])/', $string, 0, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY) as $match) {
if (trim($match) != '')
$matches[] = $match;
}
I used a loop to remove all whitespace matches, since as far as I know there isn't a feature in preg_split() to that for you.
精彩评论