--- /dev/null
+--TEST--
+Test for pre-defined pcre constants
+--FILE--
+<?php
+
+echo "PCRE constants test\n";
+
+echo "PREG_PATTERN_ORDER= ", PREG_PATTERN_ORDER, "\n";
+echo "PREG_OFFSET_CAPTURE= ", PREG_OFFSET_CAPTURE, "\n";
+echo "PREG_SPLIT_NO_EMPTY= ", PREG_SPLIT_NO_EMPTY, "\n";
+echo "PREG_SPLIT_DELIM_CAPTURE= ", PREG_SPLIT_DELIM_CAPTURE, "\n";
+echo "PREG_SPLIT_OFFSET_CAPTURE= ", PREG_SPLIT_OFFSET_CAPTURE, "\n";
+echo "PREG_GREP_INVERT= ", PREG_GREP_INVERT, "\n";
+echo "PREG_NO_ERROR= ", PREG_NO_ERROR, "\n";
+echo "PREG_INTERNAL_ERROR= ", PREG_INTERNAL_ERROR, "\n";
+echo "PREG_BACKTRACK_LIMIT_ERROR= ", PREG_BACKTRACK_LIMIT_ERROR, "\n";
+echo "PREG_RECURSION_LIMIT_ERROR= ", PREG_RECURSION_LIMIT_ERROR, "\n";
+echo "PREG_BAD_UTF8_ERROR= ", PREG_BAD_UTF8_ERROR, "\n";
+
+?>
+===Done===
+--EXPECT--
+PCRE constants test
+PREG_PATTERN_ORDER= 1
+PREG_OFFSET_CAPTURE= 256
+PREG_SPLIT_NO_EMPTY= 1
+PREG_SPLIT_DELIM_CAPTURE= 2
+PREG_SPLIT_OFFSET_CAPTURE= 4
+PREG_GREP_INVERT= 1
+PREG_NO_ERROR= 0
+PREG_INTERNAL_ERROR= 1
+PREG_BACKTRACK_LIMIT_ERROR= 2
+PREG_RECURSION_LIMIT_ERROR= 3
+PREG_BAD_UTF8_ERROR= 4
+===Done===
\ No newline at end of file
--- /dev/null
+--TEST--
+Test preg_grep() function : error conditions - wrong numbers of parameters
+--FILE--
+<?php
+
+/* Prototype : int preg_last_error ( void )
+ * Description: Returns the error code of the last PCRE regex execution
+ * Source code: ext/pcre/php_pcre.c
+ */
+
+/*
+ * Pass an incorrect number of arguments to preg_last_error() to test behaviour
+ */
+
+echo "*** Testing preg_last_error() : error conditions ***\n";
+
+// Test preg_last_error with one more than the expected number of arguments
+echo "\n-- Testing preg_last_error() function with more than expected no. of arguments --\n";
+$extra_arg = 10;
+var_dump( preg_last_error($extra_arg) );
+?>
+===Done===
+--EXPECTF--
+*** Testing preg_last_error() : error conditions ***
+
+-- Testing preg_last_error() function with more than expected no. of arguments --
+
+Warning: preg_last_error() expects exactly 0 parameters, 1 given in %s on line %d
+NULL
+===Done===
\ No newline at end of file
--- /dev/null
+--TEST--
+preg_match() single line match with multi-line input
+--FILE--
+<?php
+/* Prototype : int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags [, int $offset ]]] )
+ * Description: Perform a regular expression match
+ * Source code: ext/pcre/php_pcre.c
+ */
+
+$string = "My\nName\nIs\nStrange";
+preg_match("/M(.*)/", $string, $matches);
+
+var_dump($matches);
+?>
+===Done===
+--EXPECTF--
+array(2) {
+ [0]=>
+ string(2) "My"
+ [1]=>
+ string(1) "y"
+}
+===Done===
\ No newline at end of file
--- /dev/null
+--TEST--
+Test preg_match() function : variation
+--FILE--
+<?php
+/*
+ * proto int preg_match(string pattern, string subject [, array subpatterns [, int flags [, int offset]]])
+ * Function is implemented in ext/pcre/php_pcre.c
+*/
+
+//test passing in the same variable where 1 is by value, the other is a different
+//type and by reference so should be updated to the new type.
+$string = "-1";
+preg_match('/[\-\+]?[0-9\.]*/', $string, $string);
+var_dump($string);
+?>
+===Done===
+--EXPECT--
+array(1) {
+ [0]=>
+ string(2) "-1"
+}
+===Done===
--- /dev/null
+--TEST--
+Test preg_replace_callback() function : error
+--FILE--
+<?php
+/*
+* proto string preg_replace(mixed regex, mixed replace, mixed subject [, int limit [, count]])
+* Function is implemented in ext/pcre/php_pcre.c
+*/
+error_reporting(E_ALL&~E_NOTICE);
+/*
+* Testing how preg_replace_callback reacts to being passed the wrong type of regex argument
+*/
+echo "*** Testing preg_replace_callback() : error conditions ***\n";
+$regex_array = array('abcdef', //Regex without delimiters
+'/[a-zA-Z]', //Regex without closing delimiter
+'[a-zA-Z]/', //Regex without opening delimiter
+'/[a-zA-Z]/F', array('[a-z]', //Array of Regexes
+'[A-Z]', '[0-9]'), '/[a-zA-Z]/'); //Regex string
+$replacement = array('zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine');
+function integer_word($matches) {
+ global $replacement;
+ return $replacement[$matches[0]];
+}
+$subject = 'number 1.';
+foreach($regex_array as $regex_value) {
+ print "\nArg value is $regex_value\n";
+ var_dump(preg_replace_callback($regex_value, 'integer_word', $subject));
+}
+echo "Done";
+?>
+--EXPECTF--
+*** Testing preg_replace_callback() : error conditions ***
+
+Arg value is abcdef
+
+Warning: preg_replace_callback(): Delimiter must not be alphanumeric or backslash in %s on line %d
+NULL
+
+Arg value is /[a-zA-Z]
+
+Warning: preg_replace_callback(): No ending delimiter '/' found in %s on line %d
+NULL
+
+Arg value is [a-zA-Z]/
+
+Warning: preg_replace_callback(): Unknown modifier '/' in %s on line %d
+NULL
+
+Arg value is /[a-zA-Z]/F
+
+Warning: preg_replace_callback(): Unknown modifier 'F' in %s on line %d
+NULL
+
+Arg value is Array
+string(9) "number 1."
+
+Arg value is /[a-zA-Z]/
+string(3) " 1."
+Done
\ No newline at end of file