私はこのようなテキストをいくつか持っています、それはカスタムのマークダウンスタイルのフォーマットで書かれています。例えば:
[Lorem ipsum]
Dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
[Ut wisi]
[Enim ad minim veniam](a), quis nostrud exerci tation ullamcorper.
suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat.
Vel illum dolore eu feugiat nulla facilisis at vero.
[Ros et accumsan et iusto odio dignissim](b) qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.
[[Nam liber]](c)
Tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum.
ご覧のとおり、見出しを囲む角かっこがあり、角かっこに続いて、正規表現と一致させようとしている文字を含む括弧があります。私が使用しようとしている正規表現は次のとおりです。
preg_match_all("#\[(.*?)\]\(([a-z]+)\)#is",$html,$matches)
この^の問題は、[Lorem ipsum]から(a)の終わりまで一致することです。
次のものを使用することもできますが、これが正しく機能しないように、角かっこで見出しを含めることができる必要があります。
preg_match_all("#\[([^]]+)\]\(([a-z]+)\)#is",$html,$matches)
少し読んだ後、私が必要としているのは先読みだと思いますが、頭を動かすことができませんでした。どんな助けでも大歓迎です。
明確化
私は基本的に、テキストの一部を角かっことかっこで囲み、既存の角かっこが競合を引き起こすことなく正規表現と一致させることができるようにしたいと考えています。テキストの例:
[[Lorem ipsum]](a)
Dolor sit amet, [consectetuer adipiscing elit](b), sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
希望する一致:
[[Lorem ipsum]](a)
[consectetuer adipiscing elit](b)
または...もっと複雑
[[Lorem ipsum]
Dolor sit amet, sed diam nonummy nibh euismod](a) tincidunt ut laoreet dolore magna aliquam erat volutpat.
希望する一致:
[[Lorem ipsum]
Dolor sit amet, sed diam nonummy nibh euismod](a)
出来ますか?