Най-простият израз за съвпадение, който може да задоволи вашите нужди (съвместим с POSIX ERE), е:
(/[^ \t/<>]*?)ou([^ \t/<>]*?/)
разбити, това означава:
( # Capture the following into back-reference #1
/ # match a literal '/'
[^ \t<>] # match any character that is not a space, tab, slash, or angle bracket...
*? # ...any number of times (even zero times), being reluctant
) # end capture
ou # match the letters 'ou'
( # Capture the following into back-reference #2
[^ \t/<>] # match any character that is not a space, tab, slash, or angle bracket...
*? # ...any number of times (even zero times), being reluctant
/ # match a literal '/'
) # end capture
След това използвайте израза за заместване \1au\2
Това ще игнорира текст между /
знака, ако между тях има интервал, табулация, ъглови скоби (<
и >
) или друга наклонена черта (/
). ако има други знаци, които знаете, че няма да се появят в един от тези изрази, добавете ги в класовете знаци (групите []
)
В моя емулатор той превръща този текст:
<font size=+2 color=#E66C2C> jocose /dʒə'kous/</font>
= suj vour ver / suwj dduaf.
Either A/B or B/C might happen, but <b>at any time</b> C/D might also occur
...в този текст:
<font size=+2 color=#E66C2C> jocose /dʒə'kaus/</font>
= suj vour ver / suwj dduaf.
Either A/B or B/C might happen, but <b>at any time</b> C/D might also occur
Просто попитайте, ако има нещо, което не разбирате! Ако желаете, мога също да обясня няколко проблема с този, който се опитвахте да използвате преди.
РЕДАКТИРАНЕ:
Горният израз съвпада с целия набор от фонетична транскрипция и го замества изцяло, като използва определени части от съвпадението и заменя други. Следващият опит за мач ще започне след текущия мач.
Поради тази причина, ако ou
може да се появи повече от веднъж във фонетичен израз с разделители /
, горният регулярен израз ще трябва да се изпълни многократно. За еднократно изпълнение езикът или инструментът трябва да поддържа както променлива дължина поглед напред, така и поглед назад (наричани колективно поглед наоколо)
Доколкото знам, това е само .Net Regex на Microsoft и JGSoft "вкусът" на regex (в инструменти като EditPad Pro и RegexBuddy). POSIX (който UNIX grep изисква) не поддържа никакъв вид поглед наоколо, а Python (който МИСЛЯ използва TextWrangler) не поддържа преглед на променлива дължина. Вярвам, че не би било възможно без оглед с променлива дължина.
Израз, който изисква преглед с променлива дължина и прави това, от което се нуждаете, може да бъде като този:
(?<=/[^ \t/<>]*?)ou(?=[^ \t/<>]*?/)
... и заместващият израз също ще трябва да бъде променен, тъй като съпоставяте (и по този начин замествате) само знаците, които трябва да бъдат заменени:
au
Работи почти по същия начин, с изключение на това, че съвпада само с ou
, след което изпълнява проверка (наречена твърдение с нулева ширина), за да се увери, че е непосредствено предшествано от /
и произволен брой определени знаци, и непосредствено последвано от произволен брой определени знаци, след което /
.
person
Code Jockey
schedule
04.11.2011