1

基本的には、コンパイラ コース用の単純なインタープリターを作成しています。もちろん、これは宿題タイプの質問ではありません。

アスタリスクが後に続くものは、文字列の一部でない限り、コメントと見なされます。インタープリターにブラケットであるエスケープ文字があります。

これらは私のインタープリターのサンプル構文です

* hello world
OUTPUT: "This is asterisk [*]" * outputs string
OUTPUT: "This is asterisk *"  * outputs string produces syntax error
x = "[*]" & "hello" & "[*]*]" this is already comment which produces syntax error

これを実行しようとするとRegex

[^\[]\*.*

次のものと一致します。

* hello world
 * outputs string
 *"  * outputs string produces syntax error
]*]" this is already comment which produces syntax error

私の質問は、なぜregex食べる」前に1文字だったのですか? 私はすでに必要です

* hello world
* outputs string
*"  * outputs string produces syntax error
*]" this is already comment which produces syntax error
4

2 に答える 2

1

「食べる」ではなく、一致させたい条件のキャプチャを停止するには、ゼロ幅アサーションを使用する必要があります。

(?<=[^\[])\*.*

(?<=REGEX_CONDITION)一致が行われることを保証しますが、一致した部分(あなたの場合は「[」ではありません)は一致した結果に含まれません。

デモ: http://regexr.com?32b99

編集:完全に機能させるために、追加または条件付けしました

(?<=[^\[])\*.*|^\*.*
于 2012-10-03T06:17:59.600 に答える
0

グループを使用してみて、次のようにグループ値を使用してください[^\[](\*.*)

于 2012-10-03T06:29:34.290 に答える