Как исключить символ в [] с помощью RegEx - PullRequest
5 голосов
/ 19 мая 2011

Я использую PHP preg_match_all, и это то, что я могу получить до сих пор ....

[A-Za-z+\W]+\s[\d]

Единственная проблема в том, что мне нужно, чтобы \ W не был ".

Итак, я попробовал:

[A-Za-z+[^\dA-Za-z"]\s?]+\s[\d]


[A-Za-z+]\s?+[^A-Za-z\d"]?\s[\d]

между прочим, и это просто терпит неудачу, и я действительно не могу понять, почему.

EDIT:

Вот весь RegEx;

([A-Z][a-z]+\s){1,5}\s?[^a-zA-Z\d\s:,.\'\"]\s?
[A-Za-z+\W]+\s[\d]{1,2}\s[A-Z][a-z]+\s[\d]{4}

Я разделил его на две строки, вторая строка начинается с того, что я написал.

Шаблоны, которые пытаются сопоставить:

    India – Adulterated Tea Powder Seized 18 April 2011
    India – Importer of Haldiram’s Petha Sweet Cubes Issuing Voluntary Recall 26 April 2011
    India – Undeclared Gluten Found in Sweets by Canadian Authorities 27 April 2011
    India – Adulteration Found in Edible Oils 28 April 2011
    India – Viral Disease Affects Chili Crop in Goa 28 April 2011
NOT ---->   Chili – India: Goa”. 8 April 2011
    Ivory Coast – Potential Cocoa Quality Decline despite Sufficient Surplus 11 April 2011
    Japan – Sanuki Kanzume Co. and Failure to Comply with FDA Standards 27 April 2011
    Madagascar – Toxic Sardines 14 April 2011
    Madagascar – Update: Toxic Sardines 26 April 2011

Ответы [ 4 ]

5 голосов
/ 19 мая 2011

шаблон, который вы показываете, соответствует всем буквам и не-словесным символам.Единственное, что не включено в шаблон - это числа, и вы также не хотите совпадать с двойной кавычкой.

[^\d\"_]+\s\d

Редактировать:

Я могу ошибаться, но из примера ввода этоПохоже, вы просто пытаетесь сопоставить все строки, которые не имеют двойные кавычки.Если это так, то это намного проще, и я даже сгруппировал дату отдельно от остальной части строки.Если вам не нужно группировать строчку / дату, просто удалите все скобки.

<code><?php
error_reporting(E_ALL);
$str = "    India - Adulterated Tea Powder Seized 18 April 2011
    India - Importer of Haldiram’s Petha Sweet Cubes Issuing Voluntary Recall 26 April 2011
    India - Undeclared Gluten Found in Sweets by Canadian Authorities 27 April 2011
    India - Adulteration Found in Edible Oils 28 April 2011
    India - Viral Disease Affects Chili Crop in Goa 28 April 2011
    Chili - India: Goa\". 8 April 2011
    Ivory Coast - Potential Cocoa Quality Decline despite Sufficient Surplus 11 April 2011
    Japan - Sanuki Kanzume Co. and Failure to Comply with FDA Standards 27 April 2011
    Madagascar - Toxic Sardines 14 April 2011
    Madagascar - Update: Toxic Sardines 26 April 2011";
preg_match_all("/^([^\"]+?)(\d?\d\s[a-z]+\s\d{4})$/im", $str, $m);
echo '<pre>'.print_r($m, true).'
';?>
0 голосов
/ 19 мая 2011

Может быть, я что-то здесь упускаю.С вашим собственным текстом и шаблоном, если у меня есть этот код:

$str = "India – Adulterated Tea Powder Seized 18 April 2011
    India – Importer of Haldiram’s Petha Sweet Cubes Issuing Voluntary Recall 26 April 2011
    India – Undeclared Gluten Found in Sweets by Canadian Authorities 27 April 2011
    India – Adulteration Found in Edible Oils 28 April 2011
    India – Viral Disease Affects Chili Crop in Goa 28 April 2011
    Chili – India: Goa”. 8 April 2011
    Ivory Coast – Potential Cocoa Quality Decline despite Sufficient Surplus 11 April 2011
    Japan – Sanuki Kanzume Co. and Failure to Comply with FDA Standards 27 April 2011
    Madagascar – Toxic Sardines 14 April 2011
    Madagascar – Update: Toxic Sardines 26 April 2011";
if(preg_match_all('~(?:[A-Z][a-z]+\s){1,5}\s?[^a-zA-Z\d\s:,.\'\"]\s?[A-Za-z+\W]+\s[\d]{1,2}\s[A-Z][a-z]+\s[\d]{4}~', $str, $m)) {
   print_r($m[0]);
}

ВЫХОД:

Array
(
    [0] => India – Adulterated Tea Powder Seized 18 April 2011
    [1] => India – Undeclared Gluten Found in Sweets by Canadian Authorities 27 April 2011
    [2] => India – Adulteration Found in Edible Oils 28 April 2011
    [3] => India – Viral Disease Affects Chili Crop in Goa 28 April 2011
    [4] => Ivory Coast – Potential Cocoa Quality Decline despite Sufficient Surplus 11 April 2011
    [5] => Japan – Sanuki Kanzume Co. and Failure to Comply with FDA Standards 27 April 2011
    [6] => Madagascar – Toxic Sardines 14 April 2011
    [7] => Madagascar – Update: Toxic Sardines 26 April 2011
)

И вы можете видеть, что строка с Goa" не отображается в выходных данных.Разве это не то поведение, которое вы хотели?

0 голосов
/ 19 мая 2011

Если вы знаете, что все строки с или являются допустимыми или содержат "(и, следовательно, быть неприемлемыми)", тогда [^\"]+ должно быть в порядке.

0 голосов
/ 19 мая 2011

Попробуйте это:

[A-Za-z+\W^\"]+\s[\d]

...