0

こんにちは、基本的にデータベース内のテキストである API 関数があります

ここに私が使用する関数があります

alpha(integer link, integer face, float alpha);
color(integer link, integer face, vector color, float alpha);
description(integer link, string description);
glow(integer link, integer face, glow);
name(integer link, string name)
position(integer link, vector position)
rotation(integer link, vector rotation)
texture(integer link, integer face, string texture_uuid, vector repeats, vector offsets, float rotation_in_radians)

基本的に私がやろうとしているのは、正規表現を実行して、これらのそれぞれを配列として返すことです。たとえば、テクスチャで多くの運がなかったので、使用していたuuidキーを選択する必要があります

([a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12})

その1つのフィールドでは問題なく動作しますが、他のフィールドがあるため、乗算可能な正規表現を実行する方法がわからないため、配列に入らないようです

また、(<[^>]*>|\w+) を使用していたため、リンクとフェイスも負の値になる可能性があります。これはある程度機能しますが、すべての API 関数ではありません。

このような配列でそれらが必要なため、すべてのAPI関数タイプで動作するように正規表現を構築する方法を考えてください

array(
[0] = function,
[1] = link
[2] = face
[3] = texture uuid
[4] = texture repeats
[5] = offset
[6] = rotation
)

これはテクスチャ関数を使用した例です

ここで私が使用していた例

https://regex101.com/r/vO2gW1/3 uuidを取得しないため、壊れていることがわかります

または、これらを関数として実行し、データを形式で返す関数として構造を保持する正規表現または別の方法がありますか?PHPを使用するために必要です

4

1 に答える 1

0

あなたが試すことができます

^[^(]+(?=\()|(?<=[(,])\s*\K(?:<.*?>|.*?)(?=[,)])

必要なものをすべてピックアップする必要があります。デモ。

文字列の先頭、コンマ、括弧の間のすべてに一致します。したがって、のようなものでは機能しませんanim(foo())

于 2014-12-14T08:41:05.533 に答える