我对正则表达式很陌生,说实话,这让我很困惑。在所述字符串中达到某个字符后,我需要抓取该字符串。我认为最简单的方法是使用正则表达式,但是就像我说的那样,我对它很陌生。任何人都可以帮助我或指出正确的方向吗?
例如:我需要检查字符串“23444:thisstring”并将“thisstring”保存到一个新字符串中。
如果这是你的字符串:
I'm very new at regex, and to be completely honest it confounds me
并且您想在第一个“c”之后获取所有内容,那么这个正则表达式将起作用:
/c(.*)/s
它将在第一个匹配的组中返回此匹配:
"ompletely honest it confounds me"
在这里的正则表达式测试器上试试:正则表达式测试器
解释:
c
是你要找的角色.*
(与/s
) 匹配剩下的所有内容(.*)
捕获.*
匹配的内容,使其$1
在列表上下文中可用并返回。用于删除某个字符之前的字符的正则表达式!
您可以像这样使用前瞻
.*(?=x)
其中 x 是特定字符或单词或字符串。{使用.
, $
, ^
,等字符在正则表达式*
中+
具有特殊含义,因此在 x 中使用时不要忘记转义}
编辑
对于您的示例字符串,它将是
.*(?=thisstring)
.*
匹配 0 到多个字符直到thisisstring
这是匹配“之前”之后的所有内容的单行解决方案
print $1."\n" if "beforeafter" =~ m/before(.*)/;
编辑:虽然可以使用lookbehind,但这不是必需的。分组提供了一种更简单的解决方案。
要获取之前的字符串:在您的示例中,您必须使用[^:][^:]*:\(.*\)
. 请注意,您应该至少有一个[^:]
后跟任意数量的[^:]
s,后跟一个实际的 :,即您要搜索的字符。