1

BBCode 属性に一致する正規表現を作成しようとしています。attr=value引用符なしの属性 ( ) と引用符付きの属性 ( ) を一致させたいattr="value"のですが、マークが 1 つしかない場合は一致しません (attr="valueまたはattr=value")。

先読みを使用して、この正規表現(サイズタグ用)で解決策に近づくことができました/\[size\=((?=")"(.*?)"|([^"]*))\](.*?)\[\/size\]/isが、引用された属性と引用されていない属性の一致を異なるインデックスに配置します。スキームは次のとおりです。

+-----------------------+----------+----------+----------+----------+
| Input                 | Match #1 | Match #2 | Match #3 | Match #4 |
+-----------------------+----------+----------+----------+----------+
| [size="7"]txt[/size]  | "7"      | 7        |          | txt      |
+-----------------------+----------+----------+----------+----------+
| [size=7]txt[/size]    | 7        |          | 7        | txt      |
+-----------------------+----------+----------+----------+----------+

これは大きな問題ではありませんが、それらを同じインデックスに一致させる方法があるかどうかを知りたいです。

背景情報:

基本的に、私は BBCode パーサーの改善に取り組んでいます。現在のところ、引用符なしで属性を配置することのみが許可されています"。さて、それはそれに非常に多くの制限をもたらすので、引用された属性のサポートを追加しています. 問題は、後方互換性を壊すことができないことです。そのため、両方のケースで機能するものを考え出さなければなりません。

4

1 に答える 1

1

最初のケースに一致するグループは、2 番目のケースに一致するグループとは異なる必要があるため、それらを同じインデックス/グループに一致させる方法はないと思います。

ただし、次のようにコードがこれを回避するのを見るのは珍しいことではありません。

attr = matches[1] or matches[2]

これらの要素の最大 1 つが空でないことが確実にわかるため、orロジックは機能します。

于 2012-12-18T02:05:49.410 に答える