全部,
嘗試更好地探索正則表達式。 我可以通過一個簡單的 Contains() 來實現我想要的東西 - 但嘗試看看使用正則表達式會得到什麼等價物。
我的正則表達式沒有按照我期望的方式工作,有人可以向我指出等效的正則表達式並解釋我出錯的地方嗎?
Clear Log(); Clear Globals();
dt = Open( "$SAMPLE_DATA/Cities.jmp" );
dt:city[2] = "aLBUQUERQUE";
CityList = dt:City << Get Values;
Des = list();
for(i = 1 , i <= N Items(CityList),i++,
If(!IsMissing(Regex(Char(CityList[i]),"^a|A[LB]*")),
Insert Into(Des,CityList[i]);
);
);
/*for(i = 1 , i <= N Items(CityList) , i++,
If(Contains(CityList[i],"aLB")|Contains(CityList[i],"ALB"),
Insert Into(Des,CityList[i]);
);
);*/
Show(Des);
//Close All(Data Tables,"No Save");現在你正在匹配任何一個字符串開頭的 'a' ('^a')或者“A”後跟零個或多個字母“L”或“B”(“A[LB]*”)。一些注意事項:
- 左右沒有括號,因此匹配的是“|”之前或之後的整個字符串。因此,如果字符串以“a”開頭,則表示已完成並且不會匹配其他任何內容。
- 方括號表示匹配其中的任何字符。
- 星號表示匹配零個或多個前面的字符或組,在本例中表示方括號內的組。
- 一起, or 的右側將匹配字符串中任何位置的任何一個(不僅僅是在開頭):
- A
- AL
- AB
- 白蛋白
- ABL
- 全部LLLLLLLLBBBBBLLBLLB
- 字符串 aA 實際上是 Regex 函數的兩個不同匹配項。
您可能想要這個:“^(a|A)LB.*$”,或者這個:“^[aA]LB.*$”
- 從字符串的開頭開始,匹配 a 或 A,後跟
- 字符 LB 按順序排列,後跟
- 零個或多個任意字符,句點為任意字符 (.*),後跟
- 字符串的末尾。這可能是沒有必要的。
Des = {"ALBANY", "aLBUQUERQUE"};
查看regexr.com ,它不僅有助於檢查您的代碼,而且在左側有很好的“參考”和“備忘單”部分。我幾乎總是打開多行(右上角的標誌)。
編輯以澄清匹配可以位於字符串內的任何位置。