正则表达式找到两侧没有空格的&符号

时间:2010-01-13 13:42:36

标签: php regex

我只是想弄清楚正则表达式,找到任何不会立即前后跟空格的&符号。例如,它会找到“asdf& asdf”和“asdf& asdf”而不是“asdf& asdf”

这将在preg_replace中用于在前后添加空格。 (如果你想知道,问题是我遇到了一个带有错误的WYSIWYG,它会在&符号两侧剥去空格,我需要在事后添加它们)。想法?

8 个答案:

答案 0 :(得分:5)

(\S&\S|\s&\S|\S&\s)
  • 非空白字符,后跟&和另一个非空间字符
    OR
  • 空格后跟&,后跟非空格字符 OR
  • 非空格字符后跟&,后跟另一个空格字符

答案 1 :(得分:4)

&符号宽度不是在空格之后,也不是在空格之前,而不是两者之间:

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

使用环视,因此仅捕获&符号。

答案 2 :(得分:1)

如果两边都没有空间,可以这样做

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

答案 3 :(得分:1)

在之前或之后具有非空格的&符号:

(&[^ ]|[^ ]&)

答案 4 :(得分:1)

我建议首先找到所有与左右字符无关的&符号,然后在断言后面使用负面看法,以确保两个字符都不是空格。

.&.(?<! & )

答案 5 :(得分:0)

([^\s]+&.+)|(.+&[^\s]+)

此正则表达式确保左侧xor &字符右侧没有空格

答案 6 :(得分:0)

应该有效(未经测试):/([^\s]&|&[^\s])/。如果您只关心空格而不是“任何空白字符”:/([^ ]&|&[^ ])/

答案 7 :(得分:0)

(?<=\s)\&\&\s

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

希望有所帮助