我有以下情况。
字符串有许多模式。我需要找到并选择一个。我有一个PRXPARSE,它将找到任何给定的模式。它返回第一个匹配的模式。我希望能够设定优先级。即扫描整个字符串以查找模式1,如果发现停止并返回,则扫描字符串以查找模式2等等。
这是当前代码:
True
这是当前输出: 目标TEST_STR
i=5
让我说我需要模式bbb来具有优先级,以便第三行'aaa bbb'返回'bbb'而不是'aaa'
具有多个PRXPARSE语句的短语句,并且仅在前一个失败的情况下才调用下一个,我如何使它工作?
谢谢 本
答案 0 :(得分:2)
为清楚起见,正在做什么,我将区分优先顺序的模式匹配步骤分开。
正则表达式交替运算符|
本质上是用于匹配条件的or运算符。在正则表达式模式匹配中,默认目标字符串扫描从左到右执行。这两个事实意味着默认行为将返回第一个匹配条件的位置,从而返回您的问题。
对于优先匹配尝试,我建议使用select
语句
data want;
set have;
rx1 = prxparse ("/\b(bbb)\b/"); /* bbb as a word (\b) is first priority */
rx2 = prxparse ("/\b(aaa)\b/"); /* aaa as a word (\b) is second priority */
select;
when (prxmatch(rx1, target)) matched_with = prxposn(rx1,1,target);
when (prxmatch(rx2, target)) matched_with = prxposn(rx2,1,target);
otherwise matched_with = '*no match*';
end;
drop rx:;
run;
使用单个复杂的模式可能 可以实现优先定位,但是对它进行编码的好处并不像维护清晰易懂的代码库那么重要。复杂的模式可能涉及反向的前瞻性表达。