2013-12-17 76 views
3

我有以下peoplecode可以使用peoplecode中的新窗口邏輯在新窗口中打開鏈接。下面的peoplecode和java函數完成這項工作,直到試圖從一個已經存在的新窗口打開一個新窗口,這個新窗口導致正則表達式添加一個錯誤的_newwin。正則表達式替換URL中的下劃線之後的所有內容

代碼

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; 

這裏是我的問題:

我發現了一個正則表達式找到一個下劃線之前的一切。我想將它應用於來自正則表達式的第二組結果。

請讓我知道我該怎麼做。

回答

2

試試這個

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

這增加了一個可選的_newwin未在該組數inclueded。

如果您有支持下劃線在我們需要依靠貪婪的第二場比賽...

+0

對不起,如果我不清楚。這是發生了什麼事。如果有這樣的url http:// xxxxxxxxxxxxxx/psc/crdev_3/EMPLOYEE/CRM/c /結果是這樣的http:// xxxxxxxxxxxxxx/psc/crdev_3_newwin/EMPLOYEE/CRM/c /但是我想要這樣的東西http:// xxxxxxxxxxxxxx/psc/crdev_newwin/EMPLOYEE/CRM/c/ – Sat

+0

我改變了你的正則表達式邏輯來做我想做的事情,它效果很好。非常感謝你的幫助。這是更改後的正則表達式。 (PS [CP])/([^ \/_] *)?(?:_ [0-9])???/([^ \ /] *)/([^ \ /] *)/( [csehtqwnf] {1}) – Sat

相關問題