私は多かれ少なかれこの形式のリッチテキストのQStringを持っています:
<span background-color="red"><a name='item1'></a> property1 </span> + <span background-color="blue"><a name='item2'></a> property2 </span>
より多くのタグを持つことができますが、すべて同じ構造になります。また、各タグの間に演算子が表示されます。これは、計算を表す文字列です。
item1
文字列をトラバースして、、、item2
...;の両方を抽出するには、正規表現が必要です。property1
, ,... 部分文字列もあるproperty2
ので、別の場所に保存した値を取得できます。
次に、これらを取得した後values
、たとえば property1=value1 と property2=value2 の場合、次のような別の文字列を作成する必要があります。
value1
+value2
この文字列は、計算を計算するために評価されます。
文字列を読み取るための正規表現は何でしょうか?
コピーされた文字列で置き換える正規表現は何ですか?
注: これらの正規表現を使用してHTMLを解析するつもりはありません。フィルタリングする必要があるリッチ テキストの文字列には、上に示したタグと構造しかありません。他のタイプのタグはなく、上記の例の文字列以外の属性もありません。同じタグ構造の例をさらに多く持つことができます: name属性を持つアンカータグと表示するテキストを含むスパン。
注2 @Passerbyは、この質問のコメントに非常に近い解決策へのリンクを投稿しました。私は自分の目的に関する 1 つの (できれば小さな) 詳細を忘れていました。@Passerby が提案span
したようなものを単にチェックするのではなく、タグの間にあるものを文字列としてキャッチする必要もあります。char
何か案は?
注3実際、これは重複マークされた質問と同じ質問ではないと私はまだ主張しています。フィルタリングしている文字列は HTML のように見えますが、実際にはリッチ テキストです。それらは常にこの厳格な構造/形式を持っているため、RegEx は私が行う必要があることに対して完全に実行可能です。@Passerbyという数人のユーザーからいくつかの素晴らしいコメントを受け取った後、私はそれに行くことにしました。これは私が必要としているものに完全に機能します:
サンプル文字列:
<span background-color="red"><a name='item1'></a> property1 </span> + 300 * <span background-color="blue"><a name='item2'></a> property2 </span> + Math.sqrt(<span background-color="green"><a name='item3'></a> property3 </span>)
正規表現:
/ <span.*?><a name='(.*?)'><\/a>\s*(.*?)\s*<\/span>(((.*?)?)(?=<)|) / g
出力:
MATCH 1
1. [38-43] `item1`
2. [50-59] `property1`
3. [67-76] ` + 300 * `
4. [67-76] ` + 300 * `
5. [67-76] ` + 300 * `
MATCH 2
1. [115-120] `item2`
2. [127-136] `property2`
3. [144-157] ` + Math.sqrt(`
4. [144-157] ` + Math.sqrt(`
5. [144-157] ` + Math.sqrt(`
MATCH 3
1. [197-202] `item3`
2. [209-218] `property3`
3. [226-226] (null, matches any position)