出於某種原因,下面的正則表達式這確實在.NET的工作不是在PHP工作:正則表達式不是在PHP工作一樣用C#
// Line breaks not in real expression, just for clarity here to show sub-expressions:
$pattern = <<<REGEX
"(\\"|[^"])*"
|
'(\\'|[^'])*'
|
[A-Za-z_][A-Za-z_\-\d]*
|
[\-\+]?\d+(\.\d+)?
|
[=<>!][=]
|
[?:,()*\/\-\+!]
|
\|\|?
|
\&\&?
REGEX;
測試實際表達:
$pattern = '/"(\\\"|[^"])*"|\'(\\\'|[^\'])*\'|[A-Za-z_][A-Za-z_\-\d]*|[\-\+]?\d+(\.\d+)?|[=<>!][=]|[?:,()*\/\-\+!]|\|\|?|\&\&?/';
$expr = <<<EXPR
something ? '<a href="example.com">', title, '</a>' : title
EXPR;
preg_match_all($pattern, $expr, $tokens);
料到產出$tokens[0]
0: something
1: ?
2: '<a href="something.com">' // Please note that ' are part of token!
3: ,
4: title
5: ,
6: '</a>'
7: :
8: title
爲$tokens[0]
0: something
1: ?
2: a
3: href
4: something
5: com
出於某種原因,大部分輸入的缺失和文字的實際產量已被忽略。這在.NET中有效,但出於某種原因在PHP中不起作用。
只是一個想法:如果你想提取你的DOM的一部分,使用像http://www.php.net/manual/en/domdocument.loadhtml.php可以讓你的生活更容易,當試圖提取信息。 – afuzzyllama
@afuzzyllama它不用於分析標記,標記只是我自己的簡單表達式語言中的一個字符串。它用於數據綁定幷包含非常基本的語法。當令牌被硬編碼時,我的評估器工作正常,但正則表達式並沒有正確地分解輸入表達式。 –
@afuzzyllama用評論更新了問題。撇號'實際上是所需字符串標記的一部分。 –