Regex для поиска амперсандов без пробелов с обеих сторон - PullRequest
4 голосов
/ 13 января 2010

Я просто пытаюсь выяснить регулярное выражение, чтобы найти любые амперсанды, которым не предшествует сразу же, а затем следует пробел. Например, он найдет «asdf & asdf» и «asdf & asdf», но не «asdf & asdf»

Это будет использоваться в preg_replace для добавления пробелов до и после. (Если вам интересно, проблема в том, что я застрял с WYSIWYG, у которого есть ошибка, когда он удаляет пробелы с обеих сторон амперсандов, и мне нужно вручную добавить их обратно после факта) Мысли

Ответы [ 8 ]

5 голосов
/ 13 января 2010
(\S&\S|\s&\S|\S&\s)
  • Не пробельный символ, за которым следует & и еще один непробельный символ
    OR
  • Пробел, за которым следует &, а затем не пробел
    OR
  • Символ без пробела, за которым следует &, а затем еще один символ пробела
4 голосов
/ 13 января 2010

Ширина амперсанда не после пробела или амперсанд не перед пробелом, но не одновременно:

(?<!\s)&|&(?!\s)

Использование lookaround, так что захватывает только амперсанд.

1 голос
/ 13 января 2010

Я предлагаю сначала найти все амперсанды, независимые от символов слева и справа, а затем использовать отрицательный взгляд за утверждением, чтобы убедиться, что не оба символа являются пробелами.

.&.(?<! & )
1 голос
/ 13 января 2010

Амперсанд с пробелом после или до:

(&[^ ]|[^ ]&)
1 голос
/ 13 января 2010

Поместить пробел, если его нет ни с одной стороны, можно сделать так

echo preg_replace('/ ?& ?/',' & ','asdf&asdf asdf& asdf asdf & asdf');
//asdf & asdf asdf & asdf asdf & asdf

Для без пробелов с обеих сторон (Отвечая на заголовок вопроса) произойдет сбой asdf& asdf

echo preg_replace('/(?<! )&(?! )/',' & ','asdf&asdf asdf& asdf asdf & asdf');
//asdf & asdf asdf& asdf asdf & asdf
0 голосов
/ 18 января 2017
(?<=\s)\&\&\s

https://regex101.com/r/vBuuUf/1

надеюсь, это поможет

0 голосов
/ 13 января 2010

Должно работать (не проверено): /([^\s]&|&[^\s])/. Если вас интересуют только пробелы, а не «какой-либо пустой символ»: /([^ ]&|&[^ ])/

0 голосов
/ 13 января 2010
([^\s]+&.+)|(.+&[^\s]+)

Это регулярное выражение обеспечивает отсутствие пробела слева или справа от символа &

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...