2012年02月02日

[Unity] UnityScript(JavaScript)で正規表現によるパターンマッチングがしたい

UnityのJavaScript内で、文字列検索したいなぁと思って
「RegExp」を探したのですが見つかりませんでした。

調べてみたら、C#でなら同じような関数があるということで実装してみました。

JavaScript側からC#内のCheckEn()を呼んでます↓
-------------------------------------------------------------
■ SharpFunc.cs
using UnityEngine;
using System;
using System.Collections;
using System.Text.RegularExpressions;

public class SharpFunc : MonoBehaviour {
public bool CheckEn(string inChar) {
// 【参考】http://msdn.microsoft.com/en-us/library/30wbz966.aspx
// 【参考】http://befine.jugem.jp/?eid=29
// 数値チェック(全半角)
string patternNum = "\\d";
// アルファベットチェック
string patternAlphabet = "[a-zA-Z]";
// 特殊文字チェック
string patternSpecial = "[\\\\s\\^\\.\\$\\*\\?\\|\\(\\)\\[\\]\\{\\}\\+\\-,:;_\\&\\#\\'\\\"]";
if (Regex.IsMatch(inChar, patternNum) ||
Regex.IsMatch(inChar, patternAlphabet) ||
Regex.IsMatch(inChar, patternSpecial)){
Debug.Log(inChar + " --> true");
return true;
} else {
return false;
}
}
}
-------------------------------------------------------------
■ JavaScript側(呼出し部分のみを抜粋)
var sharpFunc : SharpFunc = GetComponent(SharpFunc);
if (sharpFunc.CheckEn(inChar)) {
return true;
} else {
return false;
}
-------------------------------------------------------------

パターンマッチング対象に漏れがあるかもしれませんが、
とりあえずこれで使ってみてます。
posted by be-style at 23:45| Comment(2) | Unity
この記事へのコメント
こんばんは。

すこし質問させていただきます。
僕も正規表現が使いたくて、usingで正規表現ライブラリを使おうとしたのですが、なにやら赤字になって使えません。(ライブラリが見つかっていない様子です。)

この記事は二年前のものですので、なぜ現在つかえないのかわかりません。

もし解決策をご存知でしたらご教授願えないでしょうか。
よろしくお願いいたします。
Posted by とおりすがり at 2014年08月31日 20:55
コメントありがとうございます。
改めて検証してみましたが、特に問題なく動作しました。

Unity 4.5.1
Mac OS 10.9.4

Unityのコンソール画面に出力されているエラーログ(赤文字)はどのようになっていますでしょうか。
検証したときに使ったコードはこちらなのですが、これでも同じ現象は起きますでしょうか?


【ファイル名】Test.cs

using UnityEngine;
using System.Collections;

using System;
using System.Collections;
using System.Text.RegularExpressions;

public class Test : MonoBehaviour {
void Start() {
string inChar = "あ";
// 数値チェック(全半角)
string patternNum = "\\d";
// アルファベットチェック
string patternAlphabet = "[a-zA-Z]";
// 特殊文字チェック
string patternSpecial = "[\\\\s\\^\\.\\$\\*\\?\\|\\(\\)\\[\\]\\{\\}\\+\\-,:;_\\&\\#\\'\\\"]";
if (Regex.IsMatch(inChar, patternNum)) Debug.Log(inChar + " --> 数値");
else if (Regex.IsMatch(inChar, patternAlphabet)) Debug.Log(inChar + " --> アルファベット");
else if (Regex.IsMatch(inChar, patternSpecial)) Debug.Log(inChar + " --> 特殊文字");
else Debug.Log(inChar + " --> その他");
return;

// inCharに入力した値と出力結果
// "1" --> 数値
// "a" --> アルファベット
// "?" --> 特殊文字
// "あ" --> その他
}
}
Posted by be-style at 2014年09月01日 04:50
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]