2010-01-13 8 views
4

我只是想找出正則表達式來找到任何不是緊跟在前面和後面的空格。例如,它會發現「ASDF ASDF &」和「ASDF ASDF &」而不是「ASDF ASDF &」正則表達式來找到兩側沒有空格的&符號

這將在preg_replace函數中使用前後添加空格。 (如果你想知道,問題是我被一個所見即所得的WYSIWYG卡住了,它有一個錯誤,它在&符號的兩邊都有空格,我需要在事實之後手動添加它們)。思考?

+0

想着這再次 - 如果你想更換和添加​​空間,也許你可以搜索'\ s?&\ s?',並用'&'替換。即使你有空間,它仍然會工作... – Kobi 2010-01-13 18:48:27

回答

4

and符不是空格之前的空間或符號後寬度不,但不能同時:

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

使用環視,所以這僅捕獲的符號。

+0

+1,這比我的整潔。 – Amarghosh 2010-01-13 14:11:30

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 
+0

根據RegexBuddy,/(?<!)&(?!)/不起作用。 – 2010-01-13 13:47:06

+0

'(?<!)&(?!)'在The Regex Coach中運行良好。 – 2010-01-13 13:49:50

+0

請注意,OP想要一個正則表達式,它匹配一個側面沒有空格的&符號或另一個(不一定是兩個)。 – 2010-01-13 13:53:16

1

與號與後或前一個非空格:

(&[^ ]|[^ ]&) 
+0

不錯,與我的相似,但更簡單,沒有看。你也可以做'\ S&|&\ S'。 – Kobi 2010-01-13 14:49:37

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

此正則表達式可以確保有左XOR沒有空間的&字符

+2

我的嘗試是相似的,但是,OP聲明模式也應該匹配「asdf&asdf」。我相信這不會。 – 2010-01-13 13:48:16

+0

公平點。將工作 – 2010-01-13 13:54:03

+0

已更新,使其工作。 – 2010-01-13 14:03:26

5
(\S&\S|\s&\S|\S&\s) 
  • 非空格字符的和正確的,其次是&另一個非空間字符
    OR
  • 空白其次是&,後面是非空格字符
    OR
  • 非空白CE炭隨後&,接着另一個空格字符
+0

爲了完成答案,我相信解決方案將是:'preg_replace('/(\ S&\ S | \ s&\ S | \ S&s)/','&',$ str);' – 2010-01-13 14:01:32

1

我建議先找到與左右字符無關的所有&字符,然後在斷言後面使用負面看來確保兩個字符都不是空格。

.&.(?<! &) 
0

它應該工作(未測試):/([^\s]&|&[^\s])/。如果你只關心空間,而不是「任何空字符」:/([^ ]&|&[^ ])/