AND regex演算子の実装が存在します。 TXR言語には、それは(&
と表記されています)否定演算子と同様に、~
と表記されています。ご覧のように、問題には当てはまりません。むしろ、我々は]
で終了していないスペースとで始まらない文字列と一致するようにそれを使用することができます:私たちは簡単にリターンを定義
$ txr
This is the TXR Lisp interactive listener of TXR 147.
Use the :quit command or type Ctrl-D on empty line to exit.
1> (defun complete-match (regex string)
(= (match-regex string regex) (length string)))
complete-match
2> (complete-match #/~ .*&~.*\]/ "")
t
3> (complete-match #/~ .*&~.*\]/ "a")
t
4> (complete-match #/~ .*&~.*\]/ "abc")
t
5> (complete-match #/~ .*&~.*\]/ " abc")
nil
6> (complete-match #/~ .*&~.*\]/ "abc]")
nil
7> (complete-match #/~ .*&~.*\]/ "]")
nil
8> (complete-match #/~ .*&~.*\]/ " ]")
nil
9> (complete-match #/~ .*&~.*\]/ " ")
nil
10> (complete-match #/~ .*&~.*\]/ "] ")
t
complete-match
機能をt
(true)かnil
(偽)入力文字列が正規表現と完全に一致する場合。 (正規表現で指定されたオートマトンは、文字列のすべての文字を処理する際に受け入れ状態になります。) &
演算子は優先順位が低いため、(~ .*)&(~.*\])
とカッコで括ることができます。これは2つの式のAND結合です。否定演算子~
はカテナネーションよりも優先順位が低いため、~abc
は「abc
以外のものと一致します」を意味します。つまり、[^a]bc
を意味するものではありません。したがって、~ .*
は、空白で始まらない文字列のセットを示し、~.*\]
は、]
で終わらない一連の文字列を示します。 (これは正規表現の構文上の特徴であるため、この正規表現の実装ではエスケープする必要があります)。
これらの無効化されたセットには、空の文字列が含まれます。空文字列は空白文字で始まらないので、空文字列は~ .*
と一致します。オプションの先頭にスペースをトリミングまたは]
後続の問題を解決するために
、我々は単に二つの連続する正規表現の置換を行うことができます。先頭のスペースを削除し、もしあれば、、その後末尾を削除「]」、もしあれば。 "and"ロジックは、連続的な変換ステップに変換されます。これを実行してAを入力してBを生成し、次にBを実行して結果Cを生成します。
文字列の先頭文字が空白で、条件付きで文字列の残りの部分または文字列全体を取るかどうかをテストするだけで済みますので、正規表現は不要です。同様に、テールを扱う:
1> (defun trim-leading-char (str ch)
(if (equal [str 0..1] `@ch`)
[str 1..:]
str))
trim-leading-char
2> (defun trim-trailing-char (str ch)
(if (equal [str -1..:] `@ch`)
[str 0..-1]
str))
trim-trailing-char
3> (trim-leading-char " abc]" #\space)
"abc]"
4> (trim-trailing-char " abc]" #\])
" abc"
5> (trim-trailing-char (trim-leading-char " abc]" #\space) #\])
"abc"
出典
2016-08-30 04:24:26
Kaz
本当に、_and_演算子はありません。両方の仕様を正規表現に入れるだけで十分です。 – sln
これにはAND演算子は必要ありません。先頭のスペースの後ろで、末尾の ']'の前にすべての文字が必要です。 REを書くのは簡単です。 '" ^。* \ "$" 'のようなもの、エラーと省略は除きます。 'Replace()'は必要ありません。使用している言語とAPIにマッチAPIが何であれ必要です。 – EJP
私はしようとしましたが、 '' ^。* \] $ "'は不可能です – MinhKiyo