660 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			660 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace Safe;
 | |
| 
 | |
| use Safe\Exceptions\PcreException;
 | |
| 
 | |
| /**
 | |
|  * Searches subject for all matches to the regular
 | |
|  * expression given in pattern and puts them in
 | |
|  * matches in the order specified by
 | |
|  * flags.
 | |
|  *
 | |
|  * After the first match is found, the subsequent searches  are continued
 | |
|  * on from end of the last match.
 | |
|  *
 | |
|  * @param string $pattern The pattern to search for, as a string.
 | |
|  * @param string $subject The input string.
 | |
|  * @param array $matches Array of all matches in multi-dimensional array ordered according to
 | |
|  * flags.
 | |
|  * @param int $flags Can be a combination of the following flags (note that it doesn't make
 | |
|  * sense to use PREG_PATTERN_ORDER together with
 | |
|  * PREG_SET_ORDER):
 | |
|  *
 | |
|  *
 | |
|  * PREG_PATTERN_ORDER
 | |
|  *
 | |
|  *
 | |
|  * Orders results so that $matches[0] is an array of full
 | |
|  * pattern matches, $matches[1] is an array of strings matched by
 | |
|  * the first parenthesized subpattern, and so on.
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * ]]>
 | |
|  *
 | |
|  * The above example will output:
 | |
|  *
 | |
|  * example: , this is a test
 | |
|  * example: , this is a test
 | |
|  * ]]>
 | |
|  *
 | |
|  *
 | |
|  * So, $out[0] contains array of strings that matched full pattern,
 | |
|  * and $out[1] contains array of strings enclosed by tags.
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * If the pattern contains named subpatterns, $matches
 | |
|  * additionally contains entries for keys with the subpattern name.
 | |
|  *
 | |
|  *
 | |
|  * If the pattern contains duplicate named subpatterns, only the rightmost
 | |
|  * subpattern is stored in $matches[NAME].
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * ]]>
 | |
|  *
 | |
|  * The above example will output:
 | |
|  *
 | |
|  *
 | |
|  * [1] => bar
 | |
|  * )
 | |
|  * ]]>
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * PREG_SET_ORDER
 | |
|  *
 | |
|  *
 | |
|  * Orders results so that $matches[0] is an array of first set
 | |
|  * of matches, $matches[1] is an array of second set of matches,
 | |
|  * and so on.
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * ]]>
 | |
|  *
 | |
|  * The above example will output:
 | |
|  *
 | |
|  * example: , example:
 | |
|  * this is a test, this is a test
 | |
|  * ]]>
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * PREG_OFFSET_CAPTURE
 | |
|  *
 | |
|  *
 | |
|  * If this flag is passed, for every occurring match the appendant string
 | |
|  * offset (in bytes) will also be returned. Note that this changes the value of
 | |
|  * matches into an array of arrays where every element is an
 | |
|  * array consisting of the matched string at offset 0
 | |
|  * and its string offset into subject at offset
 | |
|  * 1.
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * ]]>
 | |
|  *
 | |
|  * The above example will output:
 | |
|  *
 | |
|  * Array
 | |
|  * (
 | |
|  * [0] => Array
 | |
|  * (
 | |
|  * [0] => foobarbaz
 | |
|  * [1] => 0
 | |
|  * )
 | |
|  *
 | |
|  * )
 | |
|  *
 | |
|  * [1] => Array
 | |
|  * (
 | |
|  * [0] => Array
 | |
|  * (
 | |
|  * [0] => foo
 | |
|  * [1] => 0
 | |
|  * )
 | |
|  *
 | |
|  * )
 | |
|  *
 | |
|  * [2] => Array
 | |
|  * (
 | |
|  * [0] => Array
 | |
|  * (
 | |
|  * [0] => bar
 | |
|  * [1] => 3
 | |
|  * )
 | |
|  *
 | |
|  * )
 | |
|  *
 | |
|  * [3] => Array
 | |
|  * (
 | |
|  * [0] => Array
 | |
|  * (
 | |
|  * [0] => baz
 | |
|  * [1] => 6
 | |
|  * )
 | |
|  *
 | |
|  * )
 | |
|  *
 | |
|  * )
 | |
|  * ]]>
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * PREG_UNMATCHED_AS_NULL
 | |
|  *
 | |
|  *
 | |
|  * If this flag is passed, unmatched subpatterns are reported as NULL;
 | |
|  * otherwise they are reported as an empty string.
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * Orders results so that $matches[0] is an array of full
 | |
|  * pattern matches, $matches[1] is an array of strings matched by
 | |
|  * the first parenthesized subpattern, and so on.
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * ]]>
 | |
|  *
 | |
|  * The above example will output:
 | |
|  *
 | |
|  * example: , this is a test
 | |
|  * example: , this is a test
 | |
|  * ]]>
 | |
|  *
 | |
|  *
 | |
|  * So, $out[0] contains array of strings that matched full pattern,
 | |
|  * and $out[1] contains array of strings enclosed by tags.
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * The above example will output:
 | |
|  *
 | |
|  * So, $out[0] contains array of strings that matched full pattern,
 | |
|  * and $out[1] contains array of strings enclosed by tags.
 | |
|  *
 | |
|  * If the pattern contains named subpatterns, $matches
 | |
|  * additionally contains entries for keys with the subpattern name.
 | |
|  *
 | |
|  * If the pattern contains duplicate named subpatterns, only the rightmost
 | |
|  * subpattern is stored in $matches[NAME].
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * ]]>
 | |
|  *
 | |
|  * The above example will output:
 | |
|  *
 | |
|  *
 | |
|  * [1] => bar
 | |
|  * )
 | |
|  * ]]>
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * The above example will output:
 | |
|  *
 | |
|  * Orders results so that $matches[0] is an array of first set
 | |
|  * of matches, $matches[1] is an array of second set of matches,
 | |
|  * and so on.
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * ]]>
 | |
|  *
 | |
|  * The above example will output:
 | |
|  *
 | |
|  * example: , example:
 | |
|  * this is a test, this is a test
 | |
|  * ]]>
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * The above example will output:
 | |
|  *
 | |
|  * If this flag is passed, for every occurring match the appendant string
 | |
|  * offset (in bytes) will also be returned. Note that this changes the value of
 | |
|  * matches into an array of arrays where every element is an
 | |
|  * array consisting of the matched string at offset 0
 | |
|  * and its string offset into subject at offset
 | |
|  * 1.
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * ]]>
 | |
|  *
 | |
|  * The above example will output:
 | |
|  *
 | |
|  * Array
 | |
|  * (
 | |
|  * [0] => Array
 | |
|  * (
 | |
|  * [0] => foobarbaz
 | |
|  * [1] => 0
 | |
|  * )
 | |
|  *
 | |
|  * )
 | |
|  *
 | |
|  * [1] => Array
 | |
|  * (
 | |
|  * [0] => Array
 | |
|  * (
 | |
|  * [0] => foo
 | |
|  * [1] => 0
 | |
|  * )
 | |
|  *
 | |
|  * )
 | |
|  *
 | |
|  * [2] => Array
 | |
|  * (
 | |
|  * [0] => Array
 | |
|  * (
 | |
|  * [0] => bar
 | |
|  * [1] => 3
 | |
|  * )
 | |
|  *
 | |
|  * )
 | |
|  *
 | |
|  * [3] => Array
 | |
|  * (
 | |
|  * [0] => Array
 | |
|  * (
 | |
|  * [0] => baz
 | |
|  * [1] => 6
 | |
|  * )
 | |
|  *
 | |
|  * )
 | |
|  *
 | |
|  * )
 | |
|  * ]]>
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * The above example will output:
 | |
|  *
 | |
|  * If this flag is passed, unmatched subpatterns are reported as NULL;
 | |
|  * otherwise they are reported as an empty string.
 | |
|  *
 | |
|  * If no order flag is given, PREG_PATTERN_ORDER is
 | |
|  * assumed.
 | |
|  * @param int $offset Orders results so that $matches[0] is an array of full
 | |
|  * pattern matches, $matches[1] is an array of strings matched by
 | |
|  * the first parenthesized subpattern, and so on.
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * ]]>
 | |
|  *
 | |
|  * The above example will output:
 | |
|  *
 | |
|  * example: , this is a test
 | |
|  * example: , this is a test
 | |
|  * ]]>
 | |
|  *
 | |
|  *
 | |
|  * So, $out[0] contains array of strings that matched full pattern,
 | |
|  * and $out[1] contains array of strings enclosed by tags.
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * The above example will output:
 | |
|  *
 | |
|  * So, $out[0] contains array of strings that matched full pattern,
 | |
|  * and $out[1] contains array of strings enclosed by tags.
 | |
|  *
 | |
|  * If the pattern contains named subpatterns, $matches
 | |
|  * additionally contains entries for keys with the subpattern name.
 | |
|  *
 | |
|  * If the pattern contains duplicate named subpatterns, only the rightmost
 | |
|  * subpattern is stored in $matches[NAME].
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * ]]>
 | |
|  *
 | |
|  * The above example will output:
 | |
|  *
 | |
|  *
 | |
|  * [1] => bar
 | |
|  * )
 | |
|  * ]]>
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * The above example will output:
 | |
|  * @return int Returns the number of full pattern matches (which might be zero).
 | |
|  * @throws PcreException
 | |
|  *
 | |
|  */
 | |
| function preg_match_all(string $pattern, string $subject, array &$matches = null, int $flags = PREG_PATTERN_ORDER, int $offset = 0): int
 | |
| {
 | |
|     error_clear_last();
 | |
|     $result = \preg_match_all($pattern, $subject, $matches, $flags, $offset);
 | |
|     if ($result === false) {
 | |
|         throw PcreException::createFromPhpError();
 | |
|     }
 | |
|     return $result;
 | |
| }
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * Searches subject for a match to the regular
 | |
|  * expression given in pattern.
 | |
|  *
 | |
|  * @param string $pattern The pattern to search for, as a string.
 | |
|  * @param string $subject The input string.
 | |
|  * @param array $matches If matches is provided, then it is filled with
 | |
|  * the results of search. $matches[0] will contain the
 | |
|  * text that matched the full pattern, $matches[1]
 | |
|  * will have the text that matched the first captured parenthesized
 | |
|  * subpattern, and so on.
 | |
|  * @param int $flags flags can be a combination of the following flags:
 | |
|  *
 | |
|  *
 | |
|  * PREG_OFFSET_CAPTURE
 | |
|  *
 | |
|  *
 | |
|  * If this flag is passed, for every occurring match the appendant string
 | |
|  * offset (in bytes) will also be returned. Note that this changes the value of
 | |
|  * matches into an array where every element is an
 | |
|  * array consisting of the matched string at offset 0
 | |
|  * and its string offset into subject at offset
 | |
|  * 1.
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * ]]>
 | |
|  *
 | |
|  * The above example will output:
 | |
|  *
 | |
|  * Array
 | |
|  * (
 | |
|  * [0] => foobarbaz
 | |
|  * [1] => 0
 | |
|  * )
 | |
|  *
 | |
|  * [1] => Array
 | |
|  * (
 | |
|  * [0] => foo
 | |
|  * [1] => 0
 | |
|  * )
 | |
|  *
 | |
|  * [2] => Array
 | |
|  * (
 | |
|  * [0] => bar
 | |
|  * [1] => 3
 | |
|  * )
 | |
|  *
 | |
|  * [3] => Array
 | |
|  * (
 | |
|  * [0] => baz
 | |
|  * [1] => 6
 | |
|  * )
 | |
|  *
 | |
|  * )
 | |
|  * ]]>
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * PREG_UNMATCHED_AS_NULL
 | |
|  *
 | |
|  *
 | |
|  * If this flag is passed, unmatched subpatterns are reported as NULL;
 | |
|  * otherwise they are reported as an empty string.
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * ]]>
 | |
|  *
 | |
|  * The above example will output:
 | |
|  *
 | |
|  *
 | |
|  * string(2) "ac"
 | |
|  * [1]=>
 | |
|  * string(1) "a"
 | |
|  * [2]=>
 | |
|  * string(0) ""
 | |
|  * [3]=>
 | |
|  * string(1) "c"
 | |
|  * }
 | |
|  * array(4) {
 | |
|  * [0]=>
 | |
|  * string(2) "ac"
 | |
|  * [1]=>
 | |
|  * string(1) "a"
 | |
|  * [2]=>
 | |
|  * NULL
 | |
|  * [3]=>
 | |
|  * string(1) "c"
 | |
|  * }
 | |
|  * ]]>
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * If this flag is passed, for every occurring match the appendant string
 | |
|  * offset (in bytes) will also be returned. Note that this changes the value of
 | |
|  * matches into an array where every element is an
 | |
|  * array consisting of the matched string at offset 0
 | |
|  * and its string offset into subject at offset
 | |
|  * 1.
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * ]]>
 | |
|  *
 | |
|  * The above example will output:
 | |
|  *
 | |
|  * Array
 | |
|  * (
 | |
|  * [0] => foobarbaz
 | |
|  * [1] => 0
 | |
|  * )
 | |
|  *
 | |
|  * [1] => Array
 | |
|  * (
 | |
|  * [0] => foo
 | |
|  * [1] => 0
 | |
|  * )
 | |
|  *
 | |
|  * [2] => Array
 | |
|  * (
 | |
|  * [0] => bar
 | |
|  * [1] => 3
 | |
|  * )
 | |
|  *
 | |
|  * [3] => Array
 | |
|  * (
 | |
|  * [0] => baz
 | |
|  * [1] => 6
 | |
|  * )
 | |
|  *
 | |
|  * )
 | |
|  * ]]>
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * The above example will output:
 | |
|  *
 | |
|  * If this flag is passed, unmatched subpatterns are reported as NULL;
 | |
|  * otherwise they are reported as an empty string.
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * ]]>
 | |
|  *
 | |
|  * The above example will output:
 | |
|  *
 | |
|  *
 | |
|  * string(2) "ac"
 | |
|  * [1]=>
 | |
|  * string(1) "a"
 | |
|  * [2]=>
 | |
|  * string(0) ""
 | |
|  * [3]=>
 | |
|  * string(1) "c"
 | |
|  * }
 | |
|  * array(4) {
 | |
|  * [0]=>
 | |
|  * string(2) "ac"
 | |
|  * [1]=>
 | |
|  * string(1) "a"
 | |
|  * [2]=>
 | |
|  * NULL
 | |
|  * [3]=>
 | |
|  * string(1) "c"
 | |
|  * }
 | |
|  * ]]>
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * The above example will output:
 | |
|  * @param int $offset If this flag is passed, for every occurring match the appendant string
 | |
|  * offset (in bytes) will also be returned. Note that this changes the value of
 | |
|  * matches into an array where every element is an
 | |
|  * array consisting of the matched string at offset 0
 | |
|  * and its string offset into subject at offset
 | |
|  * 1.
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * ]]>
 | |
|  *
 | |
|  * The above example will output:
 | |
|  *
 | |
|  * Array
 | |
|  * (
 | |
|  * [0] => foobarbaz
 | |
|  * [1] => 0
 | |
|  * )
 | |
|  *
 | |
|  * [1] => Array
 | |
|  * (
 | |
|  * [0] => foo
 | |
|  * [1] => 0
 | |
|  * )
 | |
|  *
 | |
|  * [2] => Array
 | |
|  * (
 | |
|  * [0] => bar
 | |
|  * [1] => 3
 | |
|  * )
 | |
|  *
 | |
|  * [3] => Array
 | |
|  * (
 | |
|  * [0] => baz
 | |
|  * [1] => 6
 | |
|  * )
 | |
|  *
 | |
|  * )
 | |
|  * ]]>
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * The above example will output:
 | |
|  * @return int preg_match returns 1 if the pattern
 | |
|  * matches given subject, 0 if it does not.
 | |
|  * @throws PcreException
 | |
|  *
 | |
|  */
 | |
| function preg_match(string $pattern, string $subject, array &$matches = null, int $flags = 0, int $offset = 0): int
 | |
| {
 | |
|     error_clear_last();
 | |
|     $result = \preg_match($pattern, $subject, $matches, $flags, $offset);
 | |
|     if ($result === false) {
 | |
|         throw PcreException::createFromPhpError();
 | |
|     }
 | |
|     return $result;
 | |
| }
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * Split the given string by a regular expression.
 | |
|  *
 | |
|  * @param string $pattern The pattern to search for, as a string.
 | |
|  * @param string $subject The input string.
 | |
|  * @param int|null $limit If specified, then only substrings up to limit
 | |
|  * are returned with the rest of the string being placed in the last
 | |
|  * substring.  A limit of -1 or 0 means "no limit".
 | |
|  * @param int $flags flags can be any combination of the following
 | |
|  * flags (combined with the | bitwise operator):
 | |
|  *
 | |
|  *
 | |
|  * PREG_SPLIT_NO_EMPTY
 | |
|  *
 | |
|  *
 | |
|  * If this flag is set, only non-empty pieces will be returned by
 | |
|  * preg_split.
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * PREG_SPLIT_DELIM_CAPTURE
 | |
|  *
 | |
|  *
 | |
|  * If this flag is set, parenthesized expression in the delimiter pattern
 | |
|  * will be captured and returned as well.
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * PREG_SPLIT_OFFSET_CAPTURE
 | |
|  *
 | |
|  *
 | |
|  * If this flag is set, for every occurring match the appendant string
 | |
|  * offset will also be returned. Note that this changes the return
 | |
|  * value in an array where every element is an array consisting of the
 | |
|  * matched string at offset 0 and its string offset
 | |
|  * into subject at offset 1.
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * If this flag is set, for every occurring match the appendant string
 | |
|  * offset will also be returned. Note that this changes the return
 | |
|  * value in an array where every element is an array consisting of the
 | |
|  * matched string at offset 0 and its string offset
 | |
|  * into subject at offset 1.
 | |
|  * @return array Returns an array containing substrings of subject
 | |
|  * split along boundaries matched by pattern.
 | |
|  * @throws PcreException
 | |
|  *
 | |
|  */
 | |
| function preg_split(string $pattern, string $subject, ?int $limit = -1, int $flags = 0): array
 | |
| {
 | |
|     error_clear_last();
 | |
|     $result = \preg_split($pattern, $subject, $limit, $flags);
 | |
|     if ($result === false) {
 | |
|         throw PcreException::createFromPhpError();
 | |
|     }
 | |
|     return $result;
 | |
| }
 |