Come usare lookbehind o lookahead e sostituire la stringa abbinata?
-
06-07-2019 - |
Domanda
Sono bloccato in un altro RegEx.
Input di esempio:
project description
Voglio scrivere RegEx. che se la parola " descrizione " viene trovato ed è preceduto dalla parola " progetto " quindi anteporre " descrizione progetto " con " < progetto > " ;.
output previsto:
<project>project description
Ho scritto seguendo Regex, n stringa di sostituzione ma non funziona:
regex: ((?<=project) description)
e stringa di sostituzione: <project_description>$0
Con l'attuale regex e la stringa di sostituzione sto ottenendo il seguente output:
project<project> description
Qualcuno può suggerire qualcosa?
**
DOMANDA MODIFICATA
** Ok, penso di non essere abbastanza chiaro nel dire alle persone quello che voglio esattamente.
Per rendere il problema generico e più chiaro, lo metterò in un altro modo.
Se " y " viene dopo " x " ;, quindi anteporre <tag>
a xy.
È possibile farlo usando espressioni regolari?
Soluzione
RISPOSTA MODIFICATA:
Questo non sembra appropriato per il lookbehind. Perché non sostituisci il tutto, in questo modo:
s/(project|other|word) description/<project>$1 description/
Questo anteporrà la parola <project>
a qualsiasi project
, other
o word
se è seguita da description
.
Altri suggerimenti
Non capisco perché stai usando un lookbehind per questo - puoi semplicemente fare:
/project description/ -> <project>$0
In PHP questo sarebbe
echo preg_replace('/project description/', '<project>$0', $str);
Estensione della regex di Greg in modo che corrisponda ai casi appena aggiunti:
/Details\sof\sproject|project(\sdescription|s\sundertaken|\(s\)\ssummary)/
//replace all the matches with
<project>$0
Successivamente puoi aggiungere nuovi casi a questa regex usando |
.
MODIFICA: per rispondere If "y" comes after "x", then prepend <tag> to xy.
Sostituisci
/x\s\y/
con<tag>$0
In questo modo <tag>
verrà anteposto a tutte le occorrenze di x-space-y