我有一个文本,这是一些文本,由<null>
或路径填充,最后在paranthese中。我想捕获pattern1和pattern2(开头是..或/):
pattern1 <null> (not important)
pattern1 ../pattern2 (not important)
pattern1 /pattern2 (not important)
我期望连接第2和第3个捕获组我得到pattern2,但不是
(.+)(?=(<null>|( \.\.| \/)))(.+)(.*)(?= \()
输入:pthread_create /usr/include/c++/5/thread:115 (library)
结果:
pthread_create
/
/
有解决方法吗?
答案 0 :(得分:1)
在正则表达式中,\.\.
匹配两个点,但不会捕获/
之后的(<null>|( \.\.| \/))
,因此,lands in Group 4。此外,在其中保留一个带有捕获组的正向前瞻是没有意义的,因为它在结果中创建了不必要的组,您可以将(.+?)(<null>| (?:\.\.\/|\/))(.*?)(?= \()
移动到消费模式部分。
您可以使用
(.+?)
请参阅regex demo
模式匹配:
(<null>| (?:\.\.\/|\/))
- (第1组)除了换行符之外的任何一个或多个字符,在第一次出现之前尽可能少... <null>
- (第2组)../
或后跟/
或(.*?)(?= \()
(
- (第3组)零个或多个任何字符,但换行符尽可能少,直到第一次出现空格后跟update mytbl a
inner join mytbl b on a.formid <> b.formid
set a.id = b.id
where a.id in (1,2) and b.id in (1,2)
。