正则表达式转义字符问题我遇到了正则表达式和括号字符的问题。
这个 JSL 片段:
Show(Regex("abcdef[ghi]", "([^\[]*)\[([^\]]*)\]", "\1{\2}"))在 JMP (14.1) 中不起作用。 它给出以下错误:
Unexpected "([^]*)\[([^\]]*)\]", "\1{\2}"))". Perhaps there is a missing "," or ")".
Trying to parse arguments of function "Regex".然而,这在我的 Perl 正则表达式测试器中是有效的正则表达式。 (我在 OS X 上使用模式。) 在该环境下,输入:
abcdef[ghi]
到正则表达式
([^\[]*)\[([^\]]*)\]
使用重置值
$1{$2}产生结果
abcdef{ghi}(Perl 表达式是
$searchText =~ s/([^\[]*)\[([^\]]*)\]/$1{$2}/gism;)。
到底是怎么回事? JMP 正则表达式引擎是否需要其他方法来转义括号字符?
谢谢。
回复:正则表达式转义字符问题它也不起作用:
c=Regex("abcdef{:[[ghi]]:[{op},{q}]}", ":\[\[]\!007B([^\]]*)\]", "[{\1]");
回复:正则表达式转义字符问题我犯了一个错误。编写这样的代码不会得到正确的结果。
c=Regex("abcdef{:[[ghi]]:[{op},{q}]}", ":\[\[]\([^\]]*)\]", "[\1]");
回复:正则表达式转义字符问题如何处理这种组合:保留的范围是从“:[{”开始、到结束“]”。
{:[[ghi]]:[{op},{q}]}abcdef需要获取:
[{op},{q}]
回复:正则表达式转义字符问题作为后续,我学到了一些关于 Perl 正则表达式我不知道的东西,那就是引擎足够聪明,知道“[^[]”意味着“除了“[”之外的所有内容”。 也就是说,引擎足够聪明,不会在这个特定上下文中坚持在第二个“[”之前使用反斜杠。 它还知道如何正确解释“[^abc[]”。
JMP 中的引擎似乎也理解这一点。
所以我通过逃避“[”给自己制造了比我需要的更多的麻烦。
回复:正则表达式转义字符问题啊哈! 谢谢 pmroz 和马克。 经过一番摆弄,我弄清楚了如何做我想做的事。
1. 为了 JSL 解释器的利益,首先使用 \[...]\ 转义整个正则表达式字符串。
2. 然后,为了 Regex 引擎的利益,请像在 Perl 中一样转义括号字符。
结果是:
Show(Regex("abcdef[ghi]", "\[([^\[]*)\[([^\]]*)\]]\", "\1{\2}"));这会产生预期的结果;
abcdef{ghi}分解字符串我们有:
1. \[ 对于 JSL
2. [([^\[]*)\[([^\]]*)\] 用于正则表达式引擎(就像 Perl 中一样)
3.]\ 对于 JSL
唷!!!
回复:正则表达式转义字符问题反斜杠字符用于转义下一个字符,一般来说,就像 Perl 风格一样,但它也表示特殊字符集,例如\s对于空格字符或\d对于数字。 如果你想进入你就不会成功s通过输入\s在正则表达式中。 转义序列\[很特别,并且与结束语配对]\顺序。 也就是说,这不是包含字面量的方式]特点。 相反,它将包含直到结束转义序列的字符串。
请参阅分解形式的示例(四个捕获组),该示例说明了它们的工作原理:
Regex(
"abcdef[ghi]",
"([^\[\[]\]*)" || "(\[\[]\)" || "([^\[\[]\]*)" || "(\[\]]\)",
"\1-\2-\3-\4"
);
回复:正则表达式转义字符问题@pmroz是正确的。 早在添加正则表达式支持之前,JMP 就做出了一个不幸的选择,允许字符串中任意位置的 \[ ... ]\ 表示忽略其间的所有特殊字符含义。 要获取文字文本 \[ 需要使用 JMP 的其他转义机制 \!X,将 X 替换为 \ ,以表示在 JMP 解析 JSL 时不与 [ 结合的 \。 稍后,当正则表达式解析模式时,\ 后面跟着 [,这又告诉正则表达式忽略 [ 的特殊含义并将其视为简单字符。
我正在考虑如何让这件事变得更容易,感谢您的报告!
回复:正则表达式转义字符问题有趣的想法。 在 Perl 中 \ 仅转义下一个字符。
但如果这在 JMP 中不同,那么这应该有效:
Show(Regex("abcdef[ghi]", "([^\[\]*)\[\([^\]\].*)\]\", "\1{\2}"))
不幸的是,它没有:
正则表达式:期望 ')' 位于模式 '([^\]*)\[\([^\].*)\]\' 中的位置 21。在访问或评估 'Regex' 时,Regex/*###*/("abcdef[ghi]", "([^\]*)\!\[\([^\].*)\]\", "\1{\2}")
回复:正则表达式转义字符问题这将做你想做的事。必须转义两个转义序列!
Show(Regex("abcdef[ghi]", "([^\[\[]\]*)\[\[]\([^\]]*)\]", "\1{\2}"));
Regex("abcdef[ghi]", "([^\!\[]*)\!\[([^\]]*)\]", "\1{\2}") = "abcdef{ghi}";回复:正则表达式转义字符问题我想知道是否是因为你的字符串中有字符串转义字符序列“\[”。该序列意味着将之后的所有内容都视为字符串,直到您点击“]\”。
“([^ \[ ]*) \[ ([^\]]*) \] ”
回复:正则表达式转义字符问题聚苯乙烯 奇怪的是,这在 JMP 中运行良好:
Show(Regex("abcdef(ghi)", "([^(]*)\(([^\)]*)\)", "\1[\2]"))产生正确的结果:
Regex("abcdef(ghi)", "([^(]*)\(([^\)]*)\)", "\1[\2]") = "abcdef[ghi]";回复:正则表达式转义字符问题