正则表达式,用于替换URL块中下划线后的所有内容

时间:2013-12-17 20:45:48

标签: regex peoplesoft

我有以下peoplecode在新窗口中使用peoplecode中的新窗口逻辑打开链接。以下peoplecode和java函数完美地完成了这项工作,直到尝试从已经存在的新窗口打开一个新窗口,这导致常规表达式添加一个_newwin,这是错误的。

代码

    Function FgNewWinUrl(&strUrl As string) Returns string;
   Local string &sRegex, &sReplace, &Result;
   /* Declare java object */
   Local JavaObject &jUrl;

   /**
    * Peoplesoft Content types:
    * -------------------------
    * Component: c
    * Script: s
    * External: e
    * Homepage: h
    * Template: t
    * Query: q
    * Worklist: w
    * Navigation: n
    * File: f
   **/

   /* Regex strings */
   /*          psc/psp  Site      Portal    Node      Content Type */
   rem &sRegex = "/(ps[cp])/([^\/]*)?/([^\/]*)?/([^\/]*)?/([csehtqwnf]{1})/";

&sRegex = "/(ps[cp])/([^\/]*)?/([^\/]*)?/([^\/]*)?/([csehtqwnf]{1})/";

rem ^[^_]+(?=_);
   &sReplace = "/$1/$2_newwin/$3/$4/$5/";

   /* Instantiate objects and replace */
   &jUrl = CreateJavaObject("java.lang.String", &strUrl);
   &Result = &jUrl.replaceAll(&sRegex, &sReplace);

   /* Return modified URL */
   Return &Result;
End-Function;

这是我的问题:

我找到一个正则表达式,在下划线之前找到所有内容。我想将它应用于regex的第二组结果。

请让我知道我该怎么做。

1 个答案:

答案 0 :(得分:2)

试试这个

&sRegex = "/(ps[cp])/([^\/_]*)?(?:_newwin)?/([^\/]*)?/([^\/]*)?/([csehtqwnf]{1})/";

这会添加一个未包含在组计数中的可选newwin。

如果你必须在第二场比赛中支持下划线,我们需要依靠贪婪......