regex 正则表达式:匹配单个字符的第一次出现(和停止)[重复]

ipakzgxi  于 2023-10-22  发布在  其他
关注(0)|答案(1)|浏览(113)

这个问题已经有答案了

Regex match only first char(1个答案)
2天前关闭。
下面是一个例子:

Random string. Can include line breaks.==Random string. Can include line breaks.

**我想匹配第一次出现的等号(=)。**基本上我会得到什么,如果全局标志将被禁用(我无法做到/没有控制)。

我以为会有一个相当简单的解决办法,但到目前为止我失败得很惨。
我看过Stack Overflow上的其他例子,但它们似乎都覆盖了整个单词/短语的匹配,而不是单个字符的匹配(不包括字符串的第一部分,直到匹配)。

**后台:**我想执行一个拆分命令,其行为如下:

将字符串值围绕可选正则表达式的匹配项拆分。
所以等号是我的。我们可以有这样的测试数据,例如:

Column name==concat("A","B")

左边是表格列标题的名称。右边是表格单元格值,它也可以用测试数据函数表示(稍后将解决)。
我不想取代比赛。
引擎/工具是Apache Ant。

0ejtzxu1

0ejtzxu11#

提取-变长lookbehind

如果你可以访问可变长度的lookbehind和start-string元转义,那么这就可以做到:

(?<=\A[^=]*)=
  • (?<=\A[^=]*)-在我后面不存在等号
  • 注意:\A可以被^替换,仅当/m标志不存在时
  • =-捕获等号

https://regex101.com/r/dgjwFC/1

解压-元转义重置

如果你的正则表达式风格支持\K,那么这可能是一个选项:

\A[^=]*\K=
  • \A[^=]*-从字符串的开头开始消耗所有不是等号的内容
  • 注意:\A可以被^替换,仅当/m标志不存在时
  • \K-忘记我们消耗了什么
  • =-捕获第一个等号

https://regex101.com/r/kHPwy4/1

替换

如果您正在执行替换并有权访问捕获组,则以下操作将有效:

正则表达式

([^=]*)(=)([\s\S]*)
  • ([^=]*)-将所有非等号的内容捕获到捕获组#1中
  • (=)-将单个等号捕获到捕获组#2中
  • ([\s\S]*)-将字符串的其余部分捕获到捕获组#3中
    替换
$1REPLACE_FIRST_EQUAL_SIGN_HERE$3
  • $1-输出捕获组#1
  • REPLACE_FIRST_EQUAL_SIGN_HERE-用这个字符串替换等号
  • $3-输出捕获组#3

https://regex101.com/r/WjDThi/1

相关问题