regex 如果字符串存在,则选择该行的最后一个字符

bpsygsoo  于 2023-06-25  发布在  其他
关注(0)|答案(6)|浏览(175)

我在用PCRE。
我需要帮助开发一个正则表达式来选择行中最后一个字符的结尾。在下面的示例中,我使用了一个XML文件的片段,我需要正则表达式来查找任何包含'target='的行(如果有的话),然后选择'>'

<wrapping target="CLIENT" source="INCD"/>

我已经尝试了下面的正则表达式,但我只得到CLIENT”source=“INCD”/我需要它来查找> if target= exisit。

(?<=target=")(.*?)(?=>)
vc9ivgsu

vc9ivgsu1#

我能够用target=.+?".\K>实现我的目标

mefy6pfw

mefy6pfw2#

如果你正在使用java,this regex适合你:
(?<=target=\".{1,255}).$
困难来自于Java中lookbehind需要固定宽度的限制。解决方法是使用固定宽度范围({1,255})而不是可变宽度量词(+*)。

iq3niunx

iq3niunx3#

尝试:

/(?<=target=).*(.)$/gm

参见Regex 101上的演示

kadbb459

kadbb4594#

正如@jhnc在他们对您的问题的评论中所示,如果您正在使用PCRE,则不需要为此用例使用lookbehind。在表达式中描述要匹配的行,然后在要作为匹配返回的部分之前添加\K meta序列。正则表达式引擎仍然会匹配整个表达式,但会从返回的匹配中删除\K之前使用的所有字符。
例如,\btarget=.*\K.demo),如果您希望最后一个字符与'target='位于同一行,或者\btarget=[^>\n]*\K>demo),如果您希望包含target的标记的结束'>'。
如果你只想移动匹配指针而不想返回任何东西,那么把\K放在表达式的末尾。然后,引擎将立即匹配您的表达式所描述的位置:\btarget=.*\K

sf6xfgos

sf6xfgos5#

您可以使用\K来忘记到目前为止匹配的内容,然后使用\S来匹配最后一个非空格字符:

\btarget=.*\K\S

Regex demo

gcxthw6b

gcxthw6b6#

要将光标放置在 > 字符之后,可以使用以下命令。

(?:(?<=target=).+?)(?<=>).?

相关问题