这个问题已经有答案了:
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。
1条答案
按热度按时间0ejtzxu11#
提取-变长lookbehind
如果你可以访问可变长度的lookbehind和start-string元转义,那么这就可以做到:
(?<=\A[^=]*)
-在我后面不存在等号\A
可以被^
替换,仅当/m
标志不存在时=
-捕获等号https://regex101.com/r/dgjwFC/1
解压-元转义重置
如果你的正则表达式风格支持
\K
,那么这可能是一个选项:\A[^=]*
-从字符串的开头开始消耗所有不是等号的内容\A
可以被^
替换,仅当/m
标志不存在时\K
-忘记我们消耗了什么=
-捕获第一个等号https://regex101.com/r/kHPwy4/1
替换
如果您正在执行替换并有权访问捕获组,则以下操作将有效:
正则表达式
([^=]*)
-将所有非等号的内容捕获到捕获组#1中(=)
-将单个等号捕获到捕获组#2中([\s\S]*)
-将字符串的其余部分捕获到捕获组#3中替换
$1
-输出捕获组#1REPLACE_FIRST_EQUAL_SIGN_HERE
-用这个字符串替换等号$3
-输出捕获组#3https://regex101.com/r/WjDThi/1