所以我在文本文件中有很多文本就像一个“数据库”,我需要提取一个从字符串开始并以另一个字符串结尾的特定部分。
更具体地说,一些“数据库”看起来像这样:
i:24;s:5:"sName";s:12:"adsfasdffdfd";s:7:"iStatus";i:1;s:9:"iPosition";i:0;s:17:"sDescriptionShort";s:29:"<p>test short description</p>";s:16:"sDescriptionFull";s:28:"<p>test full description</p>";
我需要在<p>
和</p>
之间提取部分,其中第一个i:24
为参数。数字为参数。
我尝试使用regexp但直到现在都没有成功。
现在我知道要求代码本身并不好,但这次我真的被卡住了!任何想法?
附:该文件包含一个接一个的字符串。所以我需要regexp找到i:$a
$a
我的号码并返回它遇到的第一段中的内容。
所以我期望返回的是:<p>test short description</p>
考虑到这应该是在i:24
答案 0 :(得分:1)
所以你正在寻找文字i:24
之后的文字?由于这些都不是特殊字符,让我们用该文字序列开始我们的模式构建......
i:24
接下来,在i:24
和开始<p>
标记之间可能会有或不会有更多字符消耗。让我们假设这些字符可以是任何字符,因此我们将使用带有{,INF}
量词的通配符元字符,*
给我们...
i:24.*
我们想要驯服正则表达式引擎的胃口,所以让我们通过使它变得非贪婪来修改我们的量词。
i:24.*?
接下来我们要匹配AND CAPTURE一个开头,<p>
...
i:24.*?(<p>)
...以及<p>
标记内的内容,我们假设它可以是任何内容(读取通配符),也可以是任何内容,{,INF}
或*
。
i:24.*?(<p>.*)
请记住驯服我们*
量词的胃口,以免消耗太多<p>
个标签。
i:24.*?(<p>.*?)
最后,我们将通过使用转义的正斜杠来消耗和捕获结束</p>
标记来关闭它,因为它是一个特殊字符。
i:24.*?(<p>.*?<\/p>)
希望这适用于你想要完成的任务。