正则表达式比较一行中的两个子字符串

标签 regex

我有一个格式一致的行,它们本质上是分隔的字段/值对,我需要使用单个正则表达式来比较两个字段的值,如果它们相同则进行匹配。我不需要这些值,只需要匹配/不匹配比较。这里有两个例子,第一个应该匹配,第二个不应该匹配。

  1. @@field1@@someValue@@field2@@someValue@@otherField@@otherValue
  2. @@field1@@someValue@@field2@@someDIFFERENTValue@@otherField@@otherValue

我可以匹配已知模式上的任何字段或值,并且可以使用环视来执行 AND 运算。

但我不知道如何提取并保存某些模式匹配的值,例如 field1@@(.*?)@@

,然后在表达式中使用该“someValue”,将其与 field2@@(.*?)@@

的“内容”进行比较

预先感谢您的帮助。

最佳答案

您可以使用

@@field1@@([^@]*)@@field2@@(?=\1@@)
@@field1@@((?:(?!@@).)*?)@@field2@@(?=\1@@)

如果值内容中不能有@,则使用前者。否则,使用后一个正则表达式。

请参阅regex demo

详细信息

  • @@field1@@ - 文字字符串
  • ([^@]*) - 捕获组 1(稍后在模式中,可以使用 \1 反向引用来引用它):任何 0 个或更多字符除了 @
  • 之外
  • @@field2@@ - 文字字符串
  • (?=\1@@) - 紧邻当前位置的右侧,必须有与第 1 组中捕获的值相同的值,后跟 @@ 。如果可能出现字符串结尾,请替换为 (?=\1(?:@@|$))

(?:(?!@@).)*? 模式“大致”表示除 @@ 之外的任何文本,它实际上匹配任何单个字符(换行符除外),出现次数尽可能少,不会启动 @@ 字符序列。

关于正则表达式比较一行中的两个子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63193246/

相关文章:

javascript - 为什么这个简单的 javascript 正则表达式在第二种形式上不匹配?

javascript - 使用 RegExp 从 JavaScript 数组返回精确匹配

c# - 为什么这个正则表达式挂有两个尾随反斜杠但只用一个反斜杠就可以正常工作?

PHP查询邮政编码

使用 REGEXP 的 MYSQL 查询 - 使其非贪婪

javascript - 密码匹配表达式不起作用

regex - 如何在ADF数据流中的表达式生成器中编写表达式

regex - 如果所有给定的单词都在字符串中,则匹配正则表达式

javascript - Regexp Javascript 多个匹配和多个分隔符

regex - 删除 sed 中的重复字符和控制字符