1. 非贪婪匹配
默认情况下,正则表达式是“贪婪”的,这意味着它们会尽可能匹配更多的字符。
示例:
<div>这是内容1</div><div>这是内容2</div>
贪婪匹配:使用<...
1. 非贪婪匹配
默认情况下,正则表达式是“贪婪”的,这意味着它们会尽可能匹配更多的字符。
示例:
<div>这是内容1</div><div>这是内容2</div>
贪婪匹配:使用<div>.*</div>将匹配整个文本,因为.和*会尽量匹配更多的内容。
非贪婪匹配:使用<div>.*?</div>,这将仅匹配<div>这是内容1</div>。
2. 正向和反向前视断言
有时,我们想要匹配一个字符串,但只有在它前面或后面是(或不是)另一个特定字符串时。
示例:在以下文本中匹配一个不在引号内的数字:
"123" 456 "789"
正向前视断言:使用\d+(?=")匹配数字,只有当其后是引号时。这将匹配123和789
反向前视断言:使用(?<!")\d+匹配数字,只有当其前不是引号时。这将匹配456。
3. 命名捕获组
捕获组允许我们从匹配的文本中提取部分内容,但当有多个捕获组时,记住它们的顺序可能很麻烦。
示例:在以下文本中匹配日期并提取年、月、日:
2023-10-07
命名捕获组:使用(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})。这将匹配整个日期,并将2023、10、和07分别捕获到名为year、month、和day的组中。