正则表达式匹配RTRIM(LTRIM(xx))= xx

时间:2010-06-21 22:08:21

标签: regex

我正在尝试记下正则表达式以找到我在存储过程中的where子句中使用ltrim rtrim的位置。

正则表达式应匹配以下内容:

RTRIM(LTRIM(PGM_TYPE_CD))= 'P'))

RTRIM(LTRIM(PGM_TYPE_CD))='P'))

RTRIM(LTRIM(PGM_TYPE_CD)) = 'P'))

RTRIM(LTRIM(PGM_TYPE_CD))= P

RTRIM(LTRIM(PGM_TYPE_CD))= somethingelse))

等...

我正在尝试类似......

.TRIM.*\)\s+

3 个答案:

答案 0 :(得分:1)

[RL]TRIM\s*\(将查找RL后跟TRIM,任意数量的空格,然后(

答案 1 :(得分:0)

这就是你想要的:

[LR]TRIM\([RL]TRIM\([^)]+\)\)\s*=\s*[^)]+\)*

这是做什么的:

[LR]    # Match single char, either "L" or "R"
TRIM    # Match text "TRIM"
\(      # Match an open parenthesis
[RL]    # Match single char, either "R" or "L" (same as [LR], but easier to see intent)
TRIM    # Match text "TRIM"
\(      # Match an open parenthesis   
[^)]+   # Match one or more of anything that isn't closing parenthesis
\)\)    # Match two closing parentheses
\s*     # Zero or more whitespace characters
=       # Match "="
\s*     # Again, optional whitespace (not req unless next bit is captured)
[^)]+   # Match one or more of anything that isn't closing parenthesis
\)*     # Match zero or more closing parentheses. 


如果这是自动化的,并且您想知道其中包含哪些变量,则可以围绕相关部分括起括号:

[LR]TRIM\([RL]TRIM\(([^)]+)\)\)\s*=\s*([^)]+)\)*

这将为您提供第1组和第2组中的第一个和第二个变量(根据使用的正则表达式,\ 1和\ 2或$ 1和$ 2)。

答案 2 :(得分:0)

这样的事情怎么样:

.*[RL]TRIM\s*\(\s*[RL]TRIM\s*\([^\)]*)\)\s*\)\s*=\s*(.*)

这将捕获第1组和第2组中修剪内部和=的右侧,并应处理所有相关区域中的所有空白。