可以根据条件正则表达式在字符串的不同位置匹配字符串中不同位置的一个字段吗?

布赖恩·克朗拉斯

假设我有一个可能具有以下形式的字符串:

asdf - 10.0.0.1 [stuff] [xRelevantStuffx]

asdf [yRelevantStuffy] 10.0.0.1 [stuff] [xRelevantStuffx]

基本上在上述情况下,我要做的是有4个不同的组,每个组都将与以下各组匹配:

  • 第一组: asdf
  • 第3组: 10.0.0.1
  • 第4组: stuff

但是对于第2组,我希望它有所不同,具体取决于该hypen-字符是否较早出现。如果确实显示,我想进行第2组比赛xRelevantStuffx但是,如果它是一个非连字符值,则我不在乎字符串后面要出现什么,并希望它与on匹配yRelevantStuffy

RegEx是否具有条件匹配的足够功能,以使我能够完全通过正则表达式来完成此任务,还是我将尝试在此处找到利用外部字符串操作/逻辑的其他解决方案?

泡泡

您可以做的是捕获前瞻部分,并使零件从连字符开始直到最后一个括号成为可选项。前瞻是零长度的断言,它允许在放置它的位置进行操作。

^(\w+) (?=(?:-.*)?\[([^]]+)\]).*? ((?:\d+\.){3}\d+) \[([^]]+)\]

请在regex101上观看此演示如果还需要完全匹配,附加.*至模式)。


如果您需要更多组,但交替使用相同的组索引,则另一个想法是在分支重置组内捕获,其中捕获组替代方案共享相同的组索引。

^(\w+) (?=(?|-.*\[([^]]+)\]|\[([^]]+)\])).*? ((?:\d+\.){3}\d+) \[([^]]+)\]

regex101上的另一个演示分支重置在PCRE和JGsoft V2中可用)。


此外,至少在PCRE中存在可用J 标志(PCRE_DUPNAMES),标志允许子模式的重复名称。我不知道这些想法中的哪一个最适合您的环境。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

正则表达式:同一个字符串不同位置不同结果

来自分类Dev

正则表达式-字符在一个字符串中出现的次数超过x次(在不同位置)

来自分类Dev

正则表达式模式要求在不同位置使用两个特定的字符串之一

来自分类Dev

C#正则表达式-一个字符串的不同条件

来自分类Dev

如何检查一个字符串是否在不同位置包含多个单词

来自分类Dev

正则表达式匹配字符串中的最后一个字符 - C#

来自分类Dev

正则表达式匹配不包括第一个字符的字符串

来自分类Dev

Python 3-正则表达式-匹配少一个字符的字符串

来自分类Dev

使用正则表达式替换匹配字符串的最后一个字符

来自分类Dev

正则表达式查找字符串中不同字符的位置

来自分类Dev

在不同位置的字符串中插入字符

来自分类Dev

R:在一个字符串中匹配M个正则表达式后提取N个字符

来自分类Dev

正则表达式多个元素一个字符串

来自分类Dev

正则表达式以匹配2个字符串并包含另一个字符串

来自分类Dev

正则表达式以匹配多个字符串之一,然后是另一个字符串

来自分类Dev

在Java中使用正则表达式多次匹配一个字符串

来自分类Dev

如果文本仅包含一个字符串,则匹配文本的正则表达式

来自分类Dev

正则表达式删除与第一个字符串匹配的行?

来自分类Dev

使用Ansible在正则表达式匹配行的末尾附加一个字符串

来自分类Dev

得到一个字符串的PHP正则表达式匹配

来自分类Dev

正则表达式删除与第一个字符串匹配的行?

来自分类Dev

正则表达式匹配一个字符串但失败相同

来自分类Dev

基于熊猫/正则表达式的方法来匹配字符串列表中的第一个字符串

来自分类Dev

在两个字符串(包括第一个字符串)之间匹配的正则表达式

来自分类Dev

正则表达式匹配两个条件,但在字符串的不同部分

来自分类Dev

两个可能包含另一个字符串的字符串之间的正则表达式匹配

来自分类Dev

Java正则表达式:如果右括号是字符串中的最后一个字符,则匹配圆括号中的任何数字

来自分类Dev

如何从 Python 中的正则表达式中只提取一个字符串?

来自分类Dev

Powershell正则表达式匹配第一个字符串以外的字符串

Related 相关文章

  1. 1

    正则表达式:同一个字符串不同位置不同结果

  2. 2

    正则表达式-字符在一个字符串中出现的次数超过x次(在不同位置)

  3. 3

    正则表达式模式要求在不同位置使用两个特定的字符串之一

  4. 4

    C#正则表达式-一个字符串的不同条件

  5. 5

    如何检查一个字符串是否在不同位置包含多个单词

  6. 6

    正则表达式匹配字符串中的最后一个字符 - C#

  7. 7

    正则表达式匹配不包括第一个字符的字符串

  8. 8

    Python 3-正则表达式-匹配少一个字符的字符串

  9. 9

    使用正则表达式替换匹配字符串的最后一个字符

  10. 10

    正则表达式查找字符串中不同字符的位置

  11. 11

    在不同位置的字符串中插入字符

  12. 12

    R:在一个字符串中匹配M个正则表达式后提取N个字符

  13. 13

    正则表达式多个元素一个字符串

  14. 14

    正则表达式以匹配2个字符串并包含另一个字符串

  15. 15

    正则表达式以匹配多个字符串之一,然后是另一个字符串

  16. 16

    在Java中使用正则表达式多次匹配一个字符串

  17. 17

    如果文本仅包含一个字符串,则匹配文本的正则表达式

  18. 18

    正则表达式删除与第一个字符串匹配的行?

  19. 19

    使用Ansible在正则表达式匹配行的末尾附加一个字符串

  20. 20

    得到一个字符串的PHP正则表达式匹配

  21. 21

    正则表达式删除与第一个字符串匹配的行?

  22. 22

    正则表达式匹配一个字符串但失败相同

  23. 23

    基于熊猫/正则表达式的方法来匹配字符串列表中的第一个字符串

  24. 24

    在两个字符串(包括第一个字符串)之间匹配的正则表达式

  25. 25

    正则表达式匹配两个条件,但在字符串的不同部分

  26. 26

    两个可能包含另一个字符串的字符串之间的正则表达式匹配

  27. 27

    Java正则表达式:如果右括号是字符串中的最后一个字符,则匹配圆括号中的任何数字

  28. 28

    如何从 Python 中的正则表达式中只提取一个字符串?

  29. 29

    Powershell正则表达式匹配第一个字符串以外的字符串

热门标签

归档