PHP在字符串和另一个字符串

时间:2016-06-27 19:31:06

标签: php regex

所以我在文本文件中有很多文本就像一个“数据库”,我需要提取一个从字符串开始并以另一个字符串结尾的特定部分。

更具体地说,一些“数据库”看起来像这样:

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

之后遇到的第一段

1 个答案:

答案 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>)

希望这适用于你想要完成的任务。