[英]Use regex to replace text while stripping newlines and quotes
現在這大部分都是學術性的,因為我可以通過其他方式獲得相同的結果,但是……這一直困擾着我,我相信使用正則表達式是有可能的。
我想使用PHP的preg_replace替換內容,因此:
Content: “String <tag>This is some content, which contains newlines and quotation marks.</tag> and other unrelated content”.
Regex: /<tag>(.*)<\/tag>/sU
Replace: “String of other content, including matched pattern $1”
但是問題是,我想刪除元素之間找到的所有換行符和/或引號。 什么正則表達式將允許我執行此操作?
PHP的preg_replace()對主題進行一次處理。 實際上,您可以指定一組模式和替換項,但是在主題字符串的每個部分上都只能匹配一個。 使用singel正則表達式肯定沒有解決方案,因為此問題不在常規語言中。 理論計算機科學教導您需要有狀態的自動機才能執行此類任務。 正則表達式是原始的。
正如arkascha指出的那樣,這並不是一個可以輕松解決的問題。
可以在Perl中一步完成:
use strict;
use warnings;
my $string = "blah <tag> foo \"bar \n </tag> baz";
$string =~ s/(?<=\<tag\>)([^<]+)(?=\<\/tag\>)/$_=$1;s|[\n\"]||gs;$_/ges;
print $string;
這利用了Perl允許您使用代碼來生成替換字符串的事實。
我不知道是否可以在PHP中完成類似的操作。 無論如何,這不是一個好的現實世界代碼設計。 但這很有趣。
不容易,但是可能。
試試這個PHP代碼 :
function myFn($a, $b, $c) {
$b = preg_replace("!(?:\\\'|[\"\n\r])!", '', $b);
return "BEGIN " . $b . " END";
}
$s = "abc <tag>def \n ghi 'jkl' mno \"pqr\" stu</tag> vwx";
$s = preg_replace('!(<tag>)(.*?)(</tag>)!ise', 'myFn("$1", "$2", "$3")', $s);
print $s;
輸出:
abc BEGIN def ghi jkl mno pqr stu END vwx
在此處測試此代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.