Table of Contents
Personal understanding of regular expressions - lazy matching, regular expression matching
Problem description
Ignore priority quantifier
Example
Home Backend Development PHP Tutorial Personal understanding of regular expressions - lazy matching, regular expression matching_PHP tutorial

Personal understanding of regular expressions - lazy matching, regular expression matching_PHP tutorial

Jul 13, 2016 am 10:12 AM
regular expression

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

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/921718.htmlTechArticlePersonal 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...
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Repo: How To Revive Teammates
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

PHP regular expression validation: number format detection PHP regular expression validation: number format detection Mar 21, 2024 am 09:45 AM

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

How to validate email address in Golang using regular expression? How to validate email address in Golang using regular expression? May 31, 2024 pm 01:04 PM

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 of fuzzy inclusions PHP regular expressions: exact matching and exclusion of fuzzy inclusions Feb 28, 2024 pm 01:03 PM

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.

Master regular expressions and string processing in Go language Master regular expressions and string processing in Go language Nov 30, 2023 am 09:54 AM

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.

How to match timestamps using regular expressions in Go? How to match timestamps using regular expressions in Go? Jun 02, 2024 am 09:00 AM

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.

How to verify password using regular expression in Go? How to verify password using regular expression in Go? Jun 02, 2024 pm 07:31 PM

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.

How to detect URL with regular expression in Golang? How to detect URL with regular expression in Golang? May 31, 2024 am 10:32 AM

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 Use PHP regular expression functions to achieve powerful data matching functions Nov 20, 2023 pm 12:23 PM

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

See all articles