
たくさんのJMP文字関数が前の投稿:長さ、substr、containsなど。 彼らは単純なものに最適です、そしてあなたはできるあなたが望むなら、彼らと一緒に難しいことをしてください。 しかし、正規表現の方が良いかもしれません。
正規表現、略して正規表現は、テキストを操作するための強力なJSL関数です。
result = regex( sourceText, searchPattern, replaceTemplate, options );
(JSLには他に2つの関数があり、名前に正規表現が含まれています。今のところ、バニラの「正規表現」を見てください。 これは、特に列の数式で使用している場合に必要なものです。)
これは正規表現の非常に不完全な紹介です(ただし、JMPの正規表現の説明はかなり完全です)。 Web上で正規表現のチュートリアルをたくさん見つけることができます。 JMPの正規表現searchPatterns Perlの正規表現に似ています。
The searchPatternは正規表現であり、検索するテキストを記述します。 The replaceTemplate一致したテキストがどのように置き換えられるかを説明します一致したテキストのビットを使用できますテンプレートで。 次の例では、わかりやすくするために、最初の引数にリテラル文字列(引用符で囲んで)を使用していますが、変数はsourceTextほとんどの場合、より理にかなっています。
regex( "123 456 789", "[0-9]*")
「123」
この例には2つの引数があります。 sourceTextとsearchPattern 。 searchPatternは、角かっこを使用して文字のセットを作成します。 ハイフンショートカットは範囲を指定します。 [a-zA-Z]を使用して、すべての大文字と小文字のASCII文字のセットを作成できます。 アスタリスク(*)は、「前のパターンを0回以上繰り返す」ことを意味します。 \ dは、すべての数字のセットのショートカットです。
regex( "123 456 789", "\d*")
「123」
[0123456789]のような文字セットは、帽子で始めることで無効にできます。[^ 0123456789]は、数字以外の任意の文字と一致します。 \ dのようないくつかのショートカットは、文字セットとして表すことができます。
| \ w |
[a-zA-Z0-9_] |
単語の文字 |
| \ W |
[^ a-zA-Z0-9_] |
単語文字ではありません |
| \ d |
[0-9] |
数字 |
| \ D |
[^ 0-9] |
数字ではありません |
| \ s |
[\ t \ r \ n \ v \ f] |
空白には、タブ、リターン、改行、垂直タブ、およびフォームフィードが含まれます |
| \ S |
[^ \ t \ r \ n \ v \ f] |
空白ではありません |
上記のすべてのショートカットは1つの文字に一致します。 あなたは追加することができますアスタリスク
\ s *
の実行に一致するゼロ以上空白文字。 または、追加することができますプラス
\ D +
の実行に一致する1つ以上数字以外の文字。 または、追加することができます疑問符
\ w?
合わせるゼロまたは1単語の文字。
アスタリスク、プラス、および疑問符は繰り返し演算子であり、よく深い。 貪欲とは、できるだけ多くのテキストを取得し、必要に応じて後で元に戻すことを意味します。 疑問符を追加することで、気が進まないようにすることができます。 一般的に貪欲はあなたが望む行動ですが、常にではありません。
括弧、後方参照、およびreplaceTemplate
正規表現の力の多くは、 searchPatternそしてそのreplaceTemplate 。 相互作用は、\ 0、\ 1、\ 2、...として表される後方参照を使用して作成されます。 replaceTemplateのデフォルト値は「\0」です。 後方参照\0は、一致したテキスト全体です。 括弧は正規表現で使用され、パターンのビットをグループ化してより大きなパターンを形成します。 例えば
regex( "cat dog catog cadog cat dog", "cat|dog", "***", GLOBALREPLACE)
"*** *** *** og ca *** *** ***"
regex( "cat dog catog cadog cat dog", "ca(t|d)og", "***", GLOBALREPLACE)
「猫犬******猫犬」
縦棒は選択肢を分離し、優先順位は非常に低くなります。 2番目の例では、括弧を使用してtまたはdをグループ化します。 The replaceTemplate単なる一定のテキストです、***。 ただし、開いている括弧はそれぞれ新しい後方参照を開始し、後方参照はテンプレートで使用できます。
regex( "cat dog catog cadog cat dog", "ca(t|d)og", " \1 ", GLOBALREPLACE)
「キャットドッグtdキャットドッグ」
GLOBALREPLACEにより、正規表現はすべての一致を検索して置換します。パターンはcatogまたはcadogのいずれかに一致します。 括弧内のパターンの一部であるため、後方参照はtまたはdのいずれかです。 テンプレートは\1値の周りにスペースを追加し、一致した各catogまたはcadogの代わりにテンプレートが使用されます。
複数の括弧のペアは、ネストされたものと順番に使用されます。 開いている親を数えて、後方参照番号を見つけてください。
データテーブル式
これは、正規表現を使用した姓、名の例です。
Column formula using regex() regex()を使用した列式
この例では、アンカー^と$(緑色の下線付き)を使用しています。 ^は文字列の先頭に一致し、$は文字列の末尾に一致します。 \w*は0個以上の単語文字に一致します。この例は単純すぎるかもしれません。特殊文字や空白のある名前は処理されません。 後方参照を使用して、コンマで分割するように作り直すことができます。 Regex(name、 "([^、] *)"、 "\ 1")とRegex(name、 "\ s *([^、] *)$"、 "\ 1")多分。"([^、] *)"カンマではない0個以上の文字を意味します"\ s *([^、] *)$"ゼロ以上のスペースをスキップし、すべての非コンマを保持し、最後にいることを意味します。 の中に"([^、] *)"ケース\1と\0は同じです。 しかし、 "\ s *([^、] *)$"、 \ 0には、\ s*が\1の親の外にあるため、\1にはない先頭のスペースが含まれている可能性があります。
正規表現にはさらに多くのことがあり、Webの他の場所で詳しく説明されています(正規表現を検索してください)。 また、バックリファレンスの使用方法に戸惑っている場合は、スクリプトインデックスのAliceandJerryの例も非常に優れています。
次へ:パターンマッチング関数。
2017年1月29日更新:新しいコミュニティのフォーマットを修正しました。
@Craige_Hales
こんにちはクレイジ、この投稿をありがとう、本当に役に立ちました。
他の多くのバリエーションがあり、正規表現の構文について詳しく説明している正規表現に関するドキュメントはありますか?
ありがとう