我有一个涵盖多行的字符串。我需要在两个字符串之间提取文本。例如:
Start Here Some example
text covering a few
lines. End Here
我需要提取字符串Start Here Some example text covering a few lines.
我该怎么做?
答案 0 :(得分:25)
使用/s
正则表达式修饰符来处理string as a single line:
/ s的 将字符串视为单行。也就是说,改变“。”匹配任何字符,甚至是换行符,通常它不匹配。
$string =~ /(Start Here.*)End Here/s;
print $1;
这将捕获 last End Here
,以防它在您的文字中出现多次。
如果这不是您想要的,那么您可以使用:
$string =~ /(Start Here.*?)End Here/s;
print $1;
这将在第一次出现End Here
时停止匹配。
答案 1 :(得分:9)
print $1 if /(Start Here.*?)End Here/s;
答案 2 :(得分:1)
将字符串视为单行的正确修饰符不是(?s)而不是(/ s)?我已经在类似的问题上挣扎了很长一段时间,嵌入在JMeter的View Results Tree监听器中的RegExp Tester用正则表达式显示我的正则表达式提取器
(?s)<FMSFlightPlan>(.*?)</FMSFlightPlan>
匹配
<FMSFlightPlan>
C87D
AN NTEST/GL
- FPN/FN/RP:DA:GCRR:AA:EIKN:F:SAMAR,N30540W014249.UN873.
BAROK,N35580W010014..PESUL,N40529W008069..RELVA,N41512W008359..
SIVIR,N46000W008450..EMPER,N49000W009000..CON,N53545W008492
</FMSFlightPlan>
而正则表达式
(?s)<FMSFlightPlan>(.*?)</FMSFlightPlan>
不匹配。其他正则表达式测试者显示相同的结果。但是,当我尝试执行脚本时,我收到了Beanshell Assertion错误:
断言失败消息:org.apache.jorphan.util.JMeterException:调用bsh方法时出错:eval源文件:内联评估:``import java.io. *; //将数据结果写出到文件outfile =“/ Users / Dani ...”'令牌解析错误:第12行第380行的词汇错误。遇到:“\ n”(10),
所以别的东西绝对是我的错。无论如何,只是一个建议