LlSubStringIndex/ja
LSL ポータル | 関数 | イベント | 型 | 演算子 | 定数 | 実行制御 | スクリプトライブラリ | カテゴリ別スクリプトライブラリ | チュートリアル |
要約
関数: integer llSubStringIndex( string source, string pattern );警告
- マッチングでは大文字/小文字、全角/半角を区別します。
- ワイルドカードや正規表現は使えません。
- pattern を空文字列 ("") にした場合、-1 でなく 0 が戻ります。
- source の末尾から先頭方向へ検索したり、特定の位置から検索を開始する関数はありません。
サンプル
姓に関するマッチング: <lsl> default {
state_entry() { llSensorRepeat("", NULL_KEY, AGENT, PI, 96.0, 20); } sensor(integer NumDet) { integer i; //検知されたアバター名を順に " Linden" とマッチングさせる。 //これは Linden という姓とのマッチングになる。(なぜなら名の先頭にスペースは入らないから。) //逆に名とマッチングするならば "FirstName " とマッチングさせる。
for(i = 0; i < NumDet; ++i) if(~llSubStringIndex(llDetectedName(i), " Linden")) llInstantMessage(llDetectedKey(i), "Hello, I see you!"); }
} </lsl>
基本的な例: <lsl>integer index = llSubStringIndex("string data","TEST"); if(index == -1) {
llSay(0,"TEST という語は文字列中に見つかりませんでした。");
} else {
llSay(0,"TEST という語が文字列中に見つかりました。");}</lsl>
便利なスニペット
ある文字列が、特定のキーワードを含んでいるか調べる:
1. 簡潔かつ通常の手法:
<lsl> // haystack に needle が含まれていたら 1 を、含まれていないならば 0 を返す。 integer contains(string haystack, string needle) // http://wiki.secondlife.com/wiki/llSubStringIndex {
return 0 <= llSubStringIndex(haystack, needle);
} </lsl>
<lsl> // haystack の先頭が needle だったならば 1 を、そうでないならば 0 を返す。 integer startswith(string haystack, string needle) // http://wiki.secondlife.com/wiki/llSubStringIndex {
return llDeleteSubString(haystack, llStringLength(needle), -1) == needle;
} </lsl>
<lsl> // haystack の末尾が needle だったならば 1 を、そうでないならば 0 を返す。 integer endswith(string haystack, string needle) // http://wiki.secondlife.com/wiki/llSubStringIndex {
return llDeleteSubString(haystack, 0, ~llStringLength(needle)) == needle;
} </lsl>
註: 上記の例のいくつかは llSubStringIndex を実行せずに return することがあります。
2. 工夫してメモリを抑えた例 (本来 60 バイト以下のところを 54 バイト以下にしました):
<lsl> // haystack に needle が含まれていたら 1 を、含まれていないならば 0 を返す。 integer contains(string haystack, string needle) // http://wiki.secondlife.com/wiki/llSubStringIndex {
return ~llSubStringIndex(haystack, needle);
} </lsl>
註: 関数 llSubStringIndex はキーワードが見つからなかった時だけ -1 を返し、ビット反転の演算子 ~ は -1 に適用されたた時だけ 0 を返します。従って ~llSubStringIndex という上手い組み合わせにより、見つからなかった時だけ 0、見つかった時は 0 以外を返すようにできます。
註: メモリを抑えた例は、Code Racer と Efficiency Tester で計測した結果、殆ど実行速度に影響が見られませんでした。{ contains("wiki.secondlife.com", "wiki"); }
関連項目
関数
• | llListFindList | – | リストの中の、特定のリストを検索する | |
• | llGetSubString | – | 文字列から、特定の位置の文字列を取り出す。 |