pcre 正则表达式匹配第 n 次出现
pcre regex match nth occurence
这是不是重复的。问之前已经查过了
我用 |
分隔这个字符串,我想匹配 nth 元素。
aaaaaaaaa aaa|bb bbbbb|cccc ccccccc|ddd ddddddd|aaa aaa aaaaa|zzz zzz zzzzzzz
我越接近使用这个模式,但它有问题:
([^\|]*\|){2}[^\|]*
https://regex101.com/r/EYZbK5/1
这是普通的 pcre。在这种情况下,不能使用javascript这样的.split()
。
假设我想获取第三个元素cccc ccccccc
我应该使用什么正则表达式?
您可以使用
^(?:[^|]*\|){2}\K[^|]*
参见regex demo。
详情
^
- 字符串开头
(?:[^|]*\|){2}
- non-capturing group 匹配两个连续出现的
[^|]*
- negated character class 匹配 |
以外的 0+ 个字符
\|
- 一个 |
字符
\K
- match reset operator 丢弃到目前为止匹配的文本
[^|]*
- |
. 以外的 0+ 个字符
为避免空字符串匹配,您可以将最后一个 [^|]*
替换为 [^|]+
。
您可以使用锚点断言行的开头,然后重复不匹配 |
后跟 |
2 次。然后捕获包含 cccc ccccccc
的捕获组中的第三部分
^(?:[^|]*\|){2}([^|]*)
说明
^
断言行首
(?:
开始非捕获组
[^|]*\|
使用否定 character class 零次或多次后跟 |
. 来匹配非 |
){2}
关闭非捕获组并重复 2 次
([^|]*)
在匹配组中捕获不是 |
零次或多次
你可以尝试这个并参加 group2
(\|?(.*?)(?:\|)){3}
这是不是重复的。问之前已经查过了
我用 |
分隔这个字符串,我想匹配 nth 元素。
aaaaaaaaa aaa|bb bbbbb|cccc ccccccc|ddd ddddddd|aaa aaa aaaaa|zzz zzz zzzzzzz
我越接近使用这个模式,但它有问题:
([^\|]*\|){2}[^\|]*
https://regex101.com/r/EYZbK5/1
这是普通的 pcre。在这种情况下,不能使用javascript这样的.split()
。
假设我想获取第三个元素cccc ccccccc
我应该使用什么正则表达式?
您可以使用
^(?:[^|]*\|){2}\K[^|]*
参见regex demo。
详情
^
- 字符串开头(?:[^|]*\|){2}
- non-capturing group 匹配两个连续出现的[^|]*
- negated character class 匹配|
以外的 0+ 个字符
\|
- 一个|
字符
\K
- match reset operator 丢弃到目前为止匹配的文本[^|]*
-|
. 以外的 0+ 个字符
为避免空字符串匹配,您可以将最后一个 [^|]*
替换为 [^|]+
。
您可以使用锚点断言行的开头,然后重复不匹配 |
后跟 |
2 次。然后捕获包含 cccc ccccccc
^(?:[^|]*\|){2}([^|]*)
说明
^
断言行首(?:
开始非捕获组[^|]*\|
使用否定 character class 零次或多次后跟|
. 来匹配非
|
){2}
关闭非捕获组并重复 2 次([^|]*)
在匹配组中捕获不是|
零次或多次
你可以尝试这个并参加 group2
(\|?(.*?)(?:\|)){3}