我目前正在尝试使用PHP中的正则表达从较大的文本中检索某些信息块。几周前我问过一个问题,关于使用Javascript做同样的事情。 Javascript的解决方案有点混乱,我非常需要使用PHP来帮助它。
下面是一段类似于我想从中检索文本块的文本:
===Substantiv===
Någonting kul som det innebär,
uppenbarligen är det så
alltså en definition på någonting
==Slumpmässig==
Detta är en slumpmässig text mitt i som stör.
?¤% Jag stör ännu mer!
===Adjektiv===
En bra definition som är grym.
Men kanske bättre än så.
Fast ändå inte,
eller kanske faktiskt.
&56Mer störande skit som poppar in slumpmässigt här.
我想使用正则表达式以某种方式检索的文本是......
===Adjektiv===
En bra definition som är grym.
Men kanske bättre än så.
Fast ändå inte,
eller kanske faktiskt.
...其余的我想删除。
如何将我希望很好地检索的文本放入自己的字符串中?
致以最诚挚的问候,
编辑:也就是说,我想在一段文本之前和之后用空行分割我所追求的块,然后将它放入字符串中,如果它被证明是在这种情况下,正确的块包含 === Adjektiv === 。
编辑:我已经知道正则表达式了。就我所理解的而言,我面临的问题与PHP有关,不支持前瞻。
修改 {{seäven| Gift}}
==Svenska==
===Adjektiv===
{{sv-adj-t-okomp|mask=}}
'''gift'''
#{{avledning|gifta|perfpart}}; ''(om person)'' som ingått [[äktenskap]]
#:''Vet du om han är '''gift'''?''
#:''Jo, Anders och Emma är '''gifta''' med varandra.''
#:{{besläktade ord|[[gifta#Verb|gifta]], [[gifte#Substantiv|gifte]]}}
#:{{sammansättningar|[[bortgift]], [[ingift]], [[ogift]], [[omgift]]}}
#:{{fraser|[[gift par]]}}
====Översättningar====
{{ö-topp|som ingick äktenskap}}
*bokmål: {{ö+|no|gift}}
*bosniska: {{ö|bs|oženjen}} (för män), {{ö|bs|udata}} (för kvinnor)
*danska: {{ö+|da|gift}}
*engelska: {{ö+|en|married}}
*franska: {{ö+|fr|marié}}
*färöiska: {{ö|fo|giftur}}
{{ö-mitt}}
*isländska: {{ö+|is|giftur}}
*italienska: {{ö+|it|sposato}}
*litauiska: {{ö|lt|susituokęs}}
*tyska: {{ö+|de|verheiratet}}
{{ö-botten}}
答案 0 :(得分:1)
(^|\n\n)\K===Adjektiv===\n(.+(\n|$))+
这个正则表达式将匹配,没有任何前瞻或后方。如果你摆脱了\ K它应该在java脚本中工作,但你会在匹配前获得空行。 php也支持lookaheads。你可以像在wiktor的评论中那样使用\ R而不是\ n。
工作原理
这个正则表达式的工作方式是使用(^|\n\n)
匹配2个空行或字符串的开头然后使用\ K来说这实际上是你想要匹配开始的地方。然后匹配===Adjektiv===\n
= ==Adjektiv===
加上换行符。然后它继续匹配多行,其中至少有一个字符,然后是该行的换行符。它使用(.+(\n|$))+
来计算。匹配任何没有换行符与+运算符匹配至少1.它然后匹配换行符或字符串结束。这样做直到它找不到包含字符的行。如果您想允许单行为空但在两个上停止匹配,则将其替换为(.+(\n{1,2}|$))+
。另外,通过扭曲()中的最后一节,您可以使用第二个捕获组排除标题。
由于不使用前瞻或后视,这在效率方面也具有优势。