0

次のようなテキストの投稿を含む古いphpBBデータがたくさんあるデータベースがあります。

[b:522f1e2c15]bold[/b:522f1e2c15]
[i:522f1e2c15]italic[/i:522f1e2c15]
[u:522f1e2c15]underline[/u:522f1e2c15]
[img:522f1e2c15]http://www.mysite.com/myimage.jpg[/img:522f1e2c15]
[quote:522f1e2c15="Mr Smith"]quoted text by Mr Smith[/quote:522f1e2c15]
[quote="Mr Smith"]quoted text by Mr Smith[/quote]

このデータを新しいシステムに移行しています。これらのタグは、レンダリングするときにすべて操作する必要があるため、次のようになります。

<b>bold</b>
<i>italic</i>
<u>underline</u>
<img src="http://www.mysite.com/myimage.jpg" />
<div><h4>Posted by Mr Smith</h4>quoted text by Mr Smith
<div><h4>Posted by Mr Smith</h4>quoted text by Mr Smith

ほとんどの場合、元のphpBBタグ内に表示される「id」は「投稿ごとに」同じであるため、投稿は次のようになります(すべてのタグにID「522f1e2c15」が含まれます)。

This is [b:522f1e2c15]bold[/b:522f1e2c15] and this is [i:522f1e2c15]italic[/i:522f1e2c15].

ただし、同じ投稿内で、タグごとに異なるIDに対応する必要もあります。

This is [b:123f1e2c15]bold[/b:123f1e2c15] and this is [i:522f1e2c15]italic[/i:522f1e2c15].

また、これらのタグのネストされたインスタンスを処理できる必要があります。たとえば、太字のタグ付きテキストと斜体のタグ付きテキストが含まれています。

This is [b:522f1e2c15]bold and [i:522f1e2c15]this is bold italic[/i:522f1e2c15][/b:522f1e2c15].

私はもともと、上記の「quote」インスタンスを処理するために同様の質問をここに投稿しましたが、これは実用的な解決策のように見えましたが、さらにテストすると、タグに含まれるIDが同じ投稿の別のタグ(つまり、上記で投稿した例)で使用すると、壊れます。

したがって、基本的に、上記のすべてを処理する正規表現ソリューションが必要です。

4

1 に答える 1

1

ネストされたタグビットはRegexで実行するのが難しい部分ですが、.NET regexエンジンは、それらを処理するために必要なすべてのツールとIDマッチングを提供します。バランスの取れたグループで正規表現を適用して、タスクを解決できます。

そうは言っても、この種のデータの場合、たとえばGOLDパーサーシステムやANTLRなどのツールセットを使用して、真のパーサーを実装したいと思います。

于 2012-06-18T08:24:33.720 に答える