


Personal understanding of regular expressions - lazy matching, regular expression matching_PHP tutorial
Personal understanding of regular expressions - lazy matching, regular expression matching
Problem description
Link to this article: http://www.hcoding.com/?p=130
When I first learn regular expressions, I have a question. For example: I need to match the characters between the first pair of "_" in the string "_abc_123_". When I first started learning regular expressions, I would write "/_w*_/", the matching result is "abc_123" instead of "abc"; the master said to add a question mark, "/_w*?_/", then the matching result is "abc".
We know'? ' when used alone means: repeat zero or once, and when '? ' appears after the repeat qualifier, and its function is lazy matching, that is, matching as few characters as possible. Lazy qualifier description:
- *?: Repeat any number of times, but repeat as little as possible
- +?: Repeat 1 or more times, but repeat as little as possible
- ??: Repeat 0 or 1 times, but repeat as little as possible
- {n,m}?: Repeat n to m times, but repeat as little as possible
- {n,}?: Repeat n times or more, but repeat as little as possible
Yes, "as few repetitions as possible", this is a crude and straightforward explanation of lazy matching.
So how do you understand “as little repetition as possible”? We can explain it from the ignored priority quantifier of regular expressions.
Ignore priority quantifier
The quantifiers "*?", "+?", "??", "{n,m}?", "{n,}?" are all ignored priority quantifiers. The ignored priority quantifiers are used in ?, It is composed of adding ? after +, *, {}. Ignore priority will first try to ignore when matching. If it fails, it will choose to try after backtracking. For example, if `ab??` matches "abb", it will get "a" instead of "ab". When the engine successfully matches a, because it ignores the priority, the engine first chooses not to match b, and continues to check the expression. If it finds that the expression has ended, the engine will directly report that the match was successful. Specifically, we use the following example to explain step by step the working principle of ignoring priority quantifiers.
Example
Still the above example, use "/_w*?_/" to match the characters between the first pair of "_" in "_abc_123_".
After starting to match the first '_', 'w*?' first decides that it does not need to match any characters because it ignores the priority quantifier. At this time, the expression '/_w*? The second '_' in _/' (the '_' after 'w*?') and the target string '_aThe 'a' in bc_123_' matches, and the match fails. Only then will 'w*?' be used to try the unmatched branch (use w to match a, and the attempt to match a is successful)
Next step, should we try to match or ignore it? Because 'w*?' ignores the priority quantifier and will choose to ignore it, then repeat the previous step. '_' fails to match b, and 'w*?' tries the unmatched branch ab. After repeating the above steps a total of 3 times ( Until the '_' after the expression 'w*?' matches the second '_' of the target string), 'abc' is finally matched.
Process (after starting to match the first '_'):
-
The second '
- _' in expression/_w*?_/' and the target string '_abc_123_' matches, the match fails, 'w*?' tries to match the target string '_abc_123_' 'a' in, the match is successful. The second '
- _' in the expression /_w*?_/' and the target string '_abc_123_' matches, the match fails, 'w*?' tries to match the target string '_abc_123_' 'ab' in, the match is successful. The second '_
- ' in the expression /_w*?_/' and the target string '_abc_123_' matches, the match fails, 'w*?' tries to match the target string '_abc_123_' 'abc' in, the match is successful. The second '_' in the expression /_w*?
- _/' and the target string '_abc_123_' matches, the match is successful, and the match ends. The result is abc. The above are my thoughts after reading the section about ignoring priority quantifiers in "Mastering Regular Expressions". If I am wrong, I will humbly accept your advice. Thank you! Link to this article: http://www.hcoding.com/?p=130 Original article, please indicate: JC&hcoding.com

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

PHP regular expression verification: Number format detection When writing PHP programs, it is often necessary to verify the data entered by the user. One of the common verifications is to check whether the data conforms to the specified number format. In PHP, you can use regular expressions to achieve this kind of validation. This article will introduce how to use PHP regular expressions to verify number formats and provide specific code examples. First, let’s look at common number format validation requirements: Integers: only contain numbers 0-9, can start with a plus or minus sign, and do not contain decimal points. floating point

To validate email addresses in Golang using regular expressions, follow these steps: Use regexp.MustCompile to create a regular expression pattern that matches valid email address formats. Use the MatchString function to check whether a string matches a pattern. This pattern covers most valid email address formats, including: Local usernames can contain letters, numbers, and special characters: !.#$%&'*+/=?^_{|}~-`Domain names must contain at least One letter, followed by letters, numbers, or hyphens. The top-level domain (TLD) cannot be longer than 63 characters.

PHP Regular Expressions: Exact Matching and Exclusion Fuzzy inclusion regular expressions are a powerful text matching tool that can help programmers perform efficient search, replacement and filtering when processing text. In PHP, regular expressions are also widely used in string processing and data matching. This article will focus on how to perform exact matching and exclude fuzzy inclusion operations in PHP, and will illustrate it with specific code examples. Exact match Exact match means matching only strings that meet the exact condition, not any variations or extra words.

As a modern programming language, Go language provides powerful regular expressions and string processing functions, allowing developers to process string data more efficiently. It is very important for developers to master regular expressions and string processing in Go language. This article will introduce in detail the basic concepts and usage of regular expressions in Go language, and how to use Go language to process strings. 1. Regular expressions Regular expressions are a tool used to describe string patterns. They can easily implement operations such as string matching, search, and replacement.

In Go, you can use regular expressions to match timestamps: compile a regular expression string, such as the one used to match ISO8601 timestamps: ^\d{4}-\d{2}-\d{2}T \d{2}:\d{2}:\d{2}(\.\d+)?(Z|[+-][0-9]{2}:[0-9]{2})$ . Use the regexp.MatchString function to check if a string matches a regular expression.

The method of using regular expressions to verify passwords in Go is as follows: Define a regular expression pattern that meets the minimum password requirements: at least 8 characters, including lowercase letters, uppercase letters, numbers, and special characters. Compile regular expression patterns using the MustCompile function from the regexp package. Use the MatchString method to test whether the input string matches a regular expression pattern.

The steps to detect URLs in Golang using regular expressions are as follows: Compile the regular expression pattern using regexp.MustCompile(pattern). Pattern needs to match protocol, hostname, port (optional), path (optional) and query parameters (optional). Use regexp.MatchString(pattern,url) to detect whether the URL matches the pattern.

Use PHP regular expression functions to achieve powerful data matching functions. Regular expressions are a powerful data matching tool that can efficiently pattern match strings. In PHP, regular expression functions provide many functions, making data processing and filtering more flexible and convenient. 1. Basic syntax of regular expressions Regular expressions consist of a series of characters and special symbols and are used to describe the pattern of a string. In PHP, commonly used regular expression functions include preg_match(), preg_match
