Самое простое выражение соответствия, которое может удовлетворить ваши потребности (соответствует 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
Просто спросите, есть ли что-то, чего вы не понимаете! Если хотите, я также могу объяснить несколько проблем с той, которую вы пытались использовать ранее.
EDIT:
Вышеприведенное выражение соответствует всему фонетическому набору транскрипции и полностью его заменяет, используя определенные части совпадения и заменяя другие. Следующая попытка матча начнется после текущего матча.
По этой причине, если ou
может встречаться более одного раза в фонетическом выражении с разделением /
, вышеприведенное регулярное выражение необходимо будет запускать несколько раз. Для однократного выполнения язык или инструмент должны поддерживать как переменной длины упреждающий просмотр, так и обратный просмотр (общий просмотр)
Насколько я знаю, это только Microsoft .Net Regex и JGSoft "привкус" regex (в таких инструментах, как EditPad Pro и RegexBuddy). POSIX (который требуется для UNIX grep) не поддерживает какой-либо вид, а Python (который я THINK TextWrangler использует) не поддерживает переменную длину просмотр. Я считаю, что это было бы невозможно без осмотра переменной длины.
Выражение, которое требует осмотра переменной длины и делает то, что вам нужно, может выглядеть следующим образом:
(?<=/[^ \t/<>]*?)ou(?=[^ \t/<>]*?/)
... и выражение замены также необходимо изменить, поскольку вы сопоставляете (и, следовательно, заменяете) только те символы, которые должны быть заменены:
au
Он работает практически так же, за исключением того, что он соответствует только ou
, затем выполняет проверку (называемую утверждением нулевой ширины) до , чтобы убедиться, , что ему непосредственно предшествует /
, и любое количество определенных символов, за которым сразу следует любое количество определенных символов, а затем /
.