Fueling Your Coding Mojo

Buckle up, fellow PHP enthusiast! We're loading up the rocket fuel for your coding adventures...

Popular Searches:

How can I convert ereg expressions to preg in PHP?

Hi everyone,

I hope you're doing great! I am currently working on a PHP project, and I recently learned that the `ereg` function has been deprecated as of PHP 7.2. I understand that the `preg` function is the recommended alternative for pattern matching, but I'm not quite sure how to convert my `ereg` expressions to `preg` ones.

Could someone please guide me on how to convert `ereg` expressions to `preg` in PHP? I would deeply appreciate any examples or explanations you can provide to help me understand the process better.

Thank you so much in advance for your help!

Best regards,

All Replies


Hey [Username],

I completely understand your situation and I went through a similar transition from `ereg` to `preg` myself. Converting `ereg` expressions to `preg` is not too complicated once you get the hang of it.

First, let's discuss the basic differences between the two functions. In `ereg`, the pattern is always written between forward slashes (/) and the pattern modifiers are appended at the end. However, with `preg`, the pattern is enclosed in quotes and pattern modifiers are placed as separate parameters.

For example, if you had an `ereg` expression like this:

ereg("hello([0-9]+)", $string, $matches);

The equivalent `preg` expression would be:

preg_match("/hello([0-9]+)/", $string, $matches);

As you can see, the pattern is now enclosed in quotes and the slashes are added at the beginning and end. The `preg_match` function is used, which is the `preg` alternative to `ereg` for pattern matching.

Another important thing to note is that the `ereg` functions are case-insensitive by default, while `preg` functions are case-sensitive by default. If you want your `preg` expression to be case-insensitive, you can use the `i` pattern modifier like this:

preg_match("/hello([0-9]+)/i", $string, $matches);

This would match "Hello123" and "hello456" as well.

One more point of consideration is that `ereg` only matches the whole string, whereas `preg` supports matching on specific positions using pattern anchors. For example, if you want to check if a string starts with "hello", you can use the `^` anchor with `preg`:

preg_match("/^hello/", $string, $matches);

I hope this gives you a good starting point for converting your `ereg` expressions to `preg`. If you have any specific `ereg` expressions that you're struggling with, feel free to share them, and I'll be happy to assist you in converting them.

Good luck with your project!

Best regards,
User 1


Hi [Username],

Glad to join this discussion! Transitioning from `ereg` to `preg` in PHP does require some adjustments, but it's definitely worth it considering the enhanced features and performance of `preg`. I faced a few challenges during the conversion process, but with practice, it became much easier.

One aspect that caught my attention was the use of delimiters in `preg` expressions. In `ereg`, the pattern was enclosed with forward slashes (/) as delimiters, but in `preg`, you can use any non-alphanumeric character as delimiters. This flexibility comes in handy when your pattern includes slashes.

For example, if you had an `ereg` expression like:

ereg("/hello([0-9]+)/", $string, $matches);

In `preg`, you could choose different delimiters to avoid conflicts:

preg_match("~hello([0-9]+)~", $string, $matches);

Here, I used tilde (~) as the delimiter instead of forward slashes (/), so the pattern and slashes within it are interpreted correctly.

Another thing that took some adjustment was the use of backreferences. In `ereg`, we could reference matched patterns within the replacement string using escaped digits (\1, \2, etc.). However, in `preg`, we use numbered capturing groups in the pattern itself and refer to them using a dollar sign followed by the group number.

For example, if you had an `ereg` expression with backreferences like this:

ereg("([0-9]+)-([0-9]+)", $string, $matches);
echo "\\2-\\1"; // Output: secondMatchedValue-firstMatchedValue

In `preg`, it would be modified as follows:

preg_match("/([0-9]+)-([0-9]+)/", $string, $matches);
echo "$2-$1"; // Output: secondMatchedValue-firstMatchedValue

Here, the matched groups `$1` and `$2` are used directly within the code instead of using backslashes.

I hope my experience assists you in converting your `ereg` expressions to `preg`. Don't hesitate to ask if you have any further questions or need more examples. Everyone here is here to help you out!

Best regards,
User 3


Hey [Username],

I wanted to share my experience with transitioning from `ereg` to `preg` in PHP. Converting `ereg` expressions to `preg` can be a bit tricky at first, but with some practice, it becomes second nature.

One thing that really stood out for me was the need to escape certain characters in `preg`. In `ereg`, you don't usually have to worry about escaping special characters like brackets or question marks, but with `preg`, you need to escape them with a backslash (\) to ensure proper pattern matching.

For example, let's say you have an `ereg` expression like this:

ereg("hello[0-9]+?", $string, $matches);

To convert this to `preg`, you need to escape the square brackets and the question mark, like this:

preg_match("/hello\[0-9\]\+/", $string, $matches);

Not escaping those characters can lead to unexpected results or errors.

Another important consideration is Unicode character support. `ereg` has limited support for Unicode characters, while `preg` fully supports them with the `u` pattern modifier. If you're working with multilingual text or special characters, make sure to include the `u` modifier in your `preg` expression to ensure proper matching.

For instance, if you had an `ereg` expression like this:

ereg("äöü", $string, $matches);

The equivalent `preg` expression would be:

preg_match("/äöü/u", $string, $matches);

This ensures that the pattern is treated as UTF-8 and that it correctly matches the specified Unicode characters.

I hope these additional tips help you with your `ereg` to `preg` conversion. Remember to refer to the PHP manual for further details on `preg` functions and modifiers. Feel free to ask if you have any specific `ereg` expressions you're struggling with. We're here to assist you!

Best regards,
User 2

New to LearnPHP.org Community?

Join the community